Как искать наборы записей с HTML-сущностями - PullRequest
3 голосов
/ 11 марта 2011

Большая часть данных в моей базе данных хранится с html-сущностями, такими как ä вместо ä. Но некоторые данные хранятся в виде простого текста (ä).

Теперь я хочу найти все наборы записей с помощью ä ИЛИ & auml ;. Как я могу оптимально достичь этого без использования

ВЫБЕРИТЕ идентификатор ИЗ таблицы, ГДЕ ЛАЙТ контента "% ä%" ИЛИ ЛАЙКА контента "% ä% '

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Вы можете искать в таблице при замене значений, которые нужно искать в том же запросе:

SELECT * FROM table WHERE REPLACE(content,'ä','ä') LIKE '%ä%'

Тебе, конечно, придется заменить все Умляуты.

0 голосов
/ 19 марта 2011

Лучший ответ - просмотреть существующие данные и изменить все экземпляры одного на другой, чтобы они были согласованными.

Создать UDF

Create Function dbo.ReplaceHtmlEntities(@arg NVARCHAR(MAX) collate Latin1_General_Bin)
returns NVARCHAR(MAX) 
as
begin
   if @arg is null return @arg
   if not @arg like '%&%;%' return @arg
   -- Collation matters here obviously!!
   -- Auto generated lines
   -- These lines should be generated from a list of entities and Unicode values
   -- In practice you can limit this to the ones you actually have a problem with 
   set @arg = replace(@arg, 'Ä' collate Latin1_General_BIN, char(0xUUUU))
   set @arg = replace(@arg, 'ä' collate Latin1_General_BIN, char(0xUUUU))
   set @arg = replace(@arg, 'Ö' collate Latin1_General_BIN, char(0xUUUU))
   set @arg = replace(@arg, 'ö' collate Latin1_General_BIN, char(0xUUUU))
   -- For speed you can group them more common first, and short-circuit where possible
   if not @arg like '%&%;%' return @arg

   -- a lot more lines.... 
   return @arg
end

Тогда вам просто нужно пройти все ваши столы с этим лотом !!!!

...