Замена символов, отличных от ascii, в MSSQL

Я провел довольно много исследований и, похоже, не нашел ответов. Мне нужно сделать следующее:

ЗАМЕНИТЕ все символы в столбце MSSQL, которые не являются символами ascii, их эквивалентами ascii. Например:

ë --> e
ï --> i
ñ --> n

Я прочитал следующее, которое может показаться похожим, но вместо замены устраняет/удаляет эти символы (что не идеально).

Как удалить расширенный ASCII символов из строки в T-SQL?

Назначение [^\x20-\x7E] в регулярных выражениях

http://jamesveitch.com/t-sql-function-replace-non-printable-ascii-chars/

http://www.sqlservercentral.com/Forums/Topic853088-149-1.aspx

Благодаря @Eric ниже и выбранному ответу.

(Полезная ссылка: Как убрать акценты и все символы ‹› a..z в sql-сервере?)


person DeanMWake    schedule 01.06.2015    source источник
comment
Вы можете сослаться на этот stackoverflow.com/a/12715102/1287352   -  person Eric    schedule 01.06.2015
comment
@ Эрик Спасибо, похоже, это решение. То же, что люди предложили ниже.   -  person DeanMWake    schedule 01.06.2015


Ответы (3)


Вы не можете сделать это иначе, как старомодным, "жестким" способом (на любом языке, даже не только на SQL).

Поскольку во многих (разговорных/письменных) языках символы с акцентом не совпадают с символами без акцента, на самом деле это просто визуальное сходство, поэтому настоящего соответствия нет. Некоторые буквы могут выглядеть одинаково с добавленным символом, но на самом деле иметь совершенно другое «звучание» и другие правила (пример).

Просто создайте таблицу, или массив, или любые другие соответствия, которые вы знаете, находите или можете придумать.

char | replacement
------------------
à    | a
è    | e
é    | e
ñ    | n
ç    | c
ß    | B
...

Затем зациклите свои данные и символы замены, чтобы заменить все символы их соответствием.

person thomasb    schedule 01.06.2015
comment
Спасибо, используя это и ссылку от Эрика выше, мы создаем базовую функцию для этого. - person DeanMWake; 01.06.2015

Для тех, кто сталкивался с этим, как и я, я считаю приведенное ниже самым простым, даже довольно просто обновить несколько столбцов в одном операторе на месте, обязательно установите размер varchar в соответствии с изменяемыми столбцами:

UPDATE myTable
SET [Column1]   = cast([Column1] as varchar(10)) collate SQL_Latin1_General_Cp1251_CS_AS,
    [Column2]   = cast([Column2] as varchar(20)) collate SQL_Latin1_General_Cp1251_CS_AS
FROM myTable
person Hanni Ali    schedule 08.10.2016

установите значение для вашего начального символа или эквивалентное значение в таблице ascii. И запустите цикл и замените все значения в вашем новом коде.

person CaptainRabbit    schedule 01.06.2015