Нормализовать строку unicode в SQL Server?
Есть ли функция в SQL Server для нормализации строки в Юникоде? например
UPDATE Orders SET Notes = NormalizeString(Notes, 'FormC')
Формы нормализации Unicode:
- C omposition ( C ):
A
+¨
становитсяÄ
- D ecomposition ( D ):
Ä
становитсяA
+¨
- Совместимая композиция ( KC ):
A
+¨
+fi
+n
становитсяÄ
+f
+i
+n
- Совместимое разложение ( KD ):
Ä
+fi
+n
становитсяA
+¨
+f
+i
+n
Я не могу найти встроенную функцию, поэтому я предполагаю, что ее нет.
- Преобразование всех данных в SQL Server в unicode
- SQL Server Management Studio - Grid Result Сохранить как .CSV - Как выводить текст вместо UTF-16 (Unicode)
- использование текста unicode в SQL Server 2008
- SSIS не может конвертировать между unicode и un-unicode
- Сравнение одного и того же символа в VARCHAR и NVARCHAR отличается между CP1 / CP1252 и CP850 на основе сортировки БД
В идеале, если может быть только один, то мне сегодня нужна форма C:
Нормализация Юникода формы C, каноническая композиция. Преобразует каждую разложенную группировку, состоящую из базового символа плюс сочетание символов, с каноническим прекомпонованным эквивалентом. Например, A + ¨ становится Ä.
Смотрите также
- Нормализация Unicode в Windows
- Как удалить диакритические знаки (акценты) из строки в .NET?
- Функция NormalizeString
- Сортировка всего: какая форма нормализации использует SQL Server
- Публикация проекта SSDT не работает в unicode в PostDeploy - какие-либо обходные пути или конфигурации, чтобы исправить это?
- Префикс Nvarchar N для SQL Server для полей varchar
- В чем разница между сортировкой NVarchar, Bin, Bin2?
- Обработка столбцов NVARCHAR с помощью MS SQL Server и спящего режима
- Поддержка UTF-8, SQL Server 2012 и UTT UTF8String
- Несоответствие значения MD5 между SQL-сервером и PostgreSQL
- unicode активирует медленную производительность activerecord-sqlserver-адаптера
- В чем смысл COLLATIONS для столбцов nvarchar (Unicode)?
К сожалению, нет такой функции в любой версии SQL Server на сегодняшний день (сборка тестов 2012 года). Сравнение может быть корректно нечувствительным к композициям, но нет функции конвертировать использование композиции символов в одну нормальную форму.
Было предложено для будущей версии стандарта ANSI под синтаксисом NORMALIZE(string, NFC)
но это будет долгое время, прежде чем это станет реальностью. Пока, если вы хотите нормализовать, вам нужно будет сделать это на правильном языке программирования с лучшими возможностями обработки строк, либо вытащив строку из базы данных, либо создав для нее хранимую процедуру CLR.
попробуйте эту функцию CLR
using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction] public static SqlString fnRemoveDiacritics(string text) { string stringFormD = text.Normalize(System.Text.NormalizationForm.FormD); System.Text.StringBuilder retVal = new System.Text.StringBuilder(); for (int index = 0; index < stringFormD.Length; index++) { if (System.Globalization.CharUnicodeInfo.GetUnicodeCategory(stringFormD[index]) != System.Globalization.UnicodeCategory.NonSpacingMark) retVal.Append(stringFormD[index]); } return retVal.ToString().Normalize(System.Text.NormalizationForm.FormC); } }
и в SQL
SELECT dbo.fnRemoveDiacritics('Äěščřžýáíé') -- Returns: Aescrzyaie
благодаря http://www.dotnetportal.cz/blogy/4/Tomas-Jecha/663/NET-Tip-6-Ciste-odstraneni-diakritiky