Как сказал Аарон, я не думаю, что вы можете полностью отображать таблицы отображения в SQL, но отображение символов в ASCII-7 должно включать некоторые довольно простые таблицы, используемые в сочетании с AI-сопоставлениями. Здесь есть две таблицы: одна для отображения символов в столбце и одна для буквы алфавита (которая при необходимости может быть расширена).
Используя AI-сопоставления, я получаю множество явных определений отображения.
-----------------------------------------------
-- One time mapping table setup
CREATE TABLE t4000(i INT PRIMARY KEY);
GO
INSERT INTO t4000 --Just a simple list of integers from 1 to 4000
SELECT ROW_NUMBER()OVER(ORDER BY a.x)
FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) a(x)
CROSS APPLY (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) b(x)
CROSS APPLY (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) c(x)
CROSS APPLY (VALUES(1),(2),(3),(4)) d(x)
GO
CREATE TABLE TargetChars(ch NVARCHAR(2) COLLATE Latin1_General_CS_AI PRIMARY KEY);
GO
INSERT TargetChars -- A-Z, a-z, ss
SELECT TOP(128) CHAR(i)
FROM t4000
WHERE i BETWEEN 65 AND 90
OR i BETWEEN 97 AND 122
UNION ALL
SELECT 'ss'
-- plus any other special targets here
GO
-----------------------------------------------
-- function
CREATE FUNCTION dbo.TrToA7(@str NVARCHAR(4000))
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @mapped NVARCHAR(4000) = '';
SELECT TOP(LEN(@str))
@mapped += ISNULL(tc.ch, SUBSTRING(@str, i, 1))
FROM t4000
LEFT JOIN TargetChars tc ON tc.ch = SUBSTRING(@str, i, 1)
COLLATE Latin1_General_CS_AI;
RETURN @mapped;
END
GO
Пример использования:
SELECT dbo.TrToA7('It was not á tötal löß.');
Результат:
--------------------------
It was not a total loss.
Вы можете не только раздеть/изменить вход на ваш запрос? – purtip31
Будьте осторожны! Удаление акцентов может изменить значения слов. Это может дать вам юридические проблемы и в экстремальных обстоятельствах может даже привести к смерти: [Пропущенная точка сотового телефона убивает двух людей, больше трогает в тюрьме] (http://gizmodo.com/382026/a-cellphones-missing-dot- убивает-двух-людей-ставит-три-более-в-тюрьме) –
@MarkByers HOLY MACKEREL. Провел некоторое время в Турции, и да, закрытое я важно. – swasheck