Нормализовать строку unicode в SQL Server?

Есть ли функция в SQL Server для нормализации строки в Юникоде? например

UPDATE Orders SET Notes = NormalizeString(Notes, 'FormC') 

Формы нормализации Unicode:

  • C omposition ( C ): A + ¨ становится Ä
  • D ecomposition ( D ): Ä становится A + ¨
  • Совместимая композиция ( KC ): A + ¨ + + n становится Ä + f + i + n
  • Совместимое разложение ( KD ): Ä + + n становится A + ¨ + f + i + n

Я не могу найти встроенную функцию, поэтому я предполагаю, что ее нет.


В идеале, если может быть только один, то мне сегодня нужна форма C:

Нормализация Юникода формы C, каноническая композиция. Преобразует каждую разложенную группировку, состоящую из базового символа плюс сочетание символов, с каноническим прекомпонованным эквивалентом. Например, A + ¨ становится Ä.

Смотрите также

  • Нормализация Unicode в Windows
  • Как удалить диакритические знаки (акценты) из строки в .NET?
  • Функция NormalizeString
  • Сортировка всего: какая форма нормализации использует SQL Server

К сожалению, нет такой функции в любой версии 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

  • Поддержка SQL + Cyrilic + Параметрированный запрос + множественный выбор
  • Валлийский язык, SQL Server
  • Тип данных Unicode в SQL
  • freebcp: «Данные Unicode - это размер нечетного байта для столбца. Должен быть даже размер байта "
  • Поддержка Unicode для Invoke-Sqlcmd в PowerShell
  • Как работать с символом замены Unicode (0xFFFD / 65533) в SQL
  • Безопасно ли преобразовывать varchar и char в nvarchar и nchar в SQL Server?
  • Как передать параметр хранимой процедуры SQL nvarchar с помощью иврита?
  • Хранение данных UTF-16 / Unicode в SQL Server
  • Сравнение символов SQL Server 2008 и Unicode
  • SQL Server: замена арабского символа в инструкции Select
  • Interesting Posts

    Как выполнить инструкцию GO с динамическим счетом?

    SQL Server Присоединиться к оператору Select, используя count () и group by

    Столбцы SQL Combine

    Ошибка Seriate SqlContext. Не удалось выполнить шаг 'connect'

    Эффективное управление наследованием

    ORDER BY DATE, показывающий NULLS сначала, а затем самые последние даты

    SQL Server 2012 – службы Analysis Services не включены в экран «Выбор функций» установщика

    Каковы некоторые методы сохранения данных, настраиваемых пользователем в базе данных?

    Группа SQL по частоте в диапазоне дат

    Обновление столбца путем сравнения двух разных столбцов в одной таблице

    Запрос T-SQL SELECT для возврата комбинированного результата из нескольких таблиц

    Гарантировать, что несколько полей FK принадлежат к одной и той же строке в другой таблице

    DataTable: удаляет старые DataRows, прежде чем вставлять новый сейф?

    Системная функция для поиска выражения вычисленного столбца?

    Синтаксис синтаксиса SQL?

    Давайте будем гением компьютера.