SQL Server 2008: заменить строку - PullRequest
5 голосов
/ 26 июля 2010

У меня есть таблица с ошибочным символом ('�') в количестве строк в одном столбце.

Скрипт TSQL ниже не работает.

UPDATE S
SET S.Offering_Details = REPLACE(S.Offering_Details, '�', '...')
FROM tblSacrifices S

Столбецрассматриваемый тип данных nvarchar (230) допускает пустые записи.

Данные получены из файла CSV, преобразованного из Excel и d через приложение Visual Studio Windows.Первоначально данные были «...», но я думаю, что слово / excel классифицировало это как один символ (а не 3 отдельных «.»).Когда мое приложение прочитало исходную строку из файла CSV, оно (непреднамеренно) заменило «...» на «�» перед отправкой данных в базу данных.

ПОЖАЛУЙСТА, помогите

Ответы [ 4 ]

5 голосов
/ 26 июля 2010

Разобрался. Спасибо всем за помощь.

Мне пришлось преобразовать в двоичный файл. Все символы Unicode выше 65500 требуют этого, поскольку обычная REPLACE () не работает.

UPDATE S
SET S.Offering_Details = REPLACE(S.Offering_Details, nchar(65533) COLLATE Latin1_General_BIN, '...')
FROM tblSacrifices S
1 голос
/ 26 июля 2010

Изменить:

После обновления в комментариях попробуйте REPLACE(S.Offering_Details, nchar(65533), '...')

Оригинальный ответ:

Это может помочьустранить неполадки

declare @s nvarchar(230)

SELECT @s= ProblemCol
FROM YourTable
WHERE ProblemRowId = X;


set @s = N'日本国'; /*For testing*/


WITH N AS
     (SELECT 1 idx,
             LEFT(@s,1)ch,
             UNICODE(LEFT(@s,1)) C

     UNION ALL

     SELECT idx+1,
            SUBSTRING(@s,idx+1,1),
            UNICODE(SUBSTRING(@s,idx+1,1)) C
     FROM   N
     WHERE  idx<LEN(@s)
     )


  SELECT idx, ch,C
  FROM     N    

Результат теста

idx         ch   C
----------- ---- -----------
1           日    26085
2           本    26412
3           国    22269
1 голос
/ 26 июля 2010

Попробуйте явно указать, что искомый символ - это nvarchar, используя начальный N:

UPDATE S
SET S.Offering_Details = REPLACE(S.Offering_Details, N'�', '...')
FROM tblSacrifices S

ОБНОВЛЕНИЕ На основе обсуждения из ответа Мартина:

У меня нет оснований полагать, что это функционально отличается от того, что я написал выше, но вы можете попробовать:

UPDATE S
SET S.Offering_Details = REPLACE(S.Offering_Details, NCHAR(65533), '...')
FROM tblSacrifices S

ОБНОВЛЕНИЕ 2

Я недостаточно внимательно прочитал код Мартина, прежде чем обновлять свой ответ.Поскольку для отображения результатов используется функция SQL Server UNICODE, на самом деле символ ошибки маскируется 65533.

См. здесь для получения подробной информации о символе юникода 65533 - это общее значение Юникода дляневерные данные.

0 голосов
/ 20 января 2018

Используйте функцию Unicode следующим образом, она может вам помочь:

UPDATE S
SET S.Offering_Details = REPLACE(S.Offering_Details, NCHAR(UNICODE('�')), '...')
FROM tblSacrifices S where S.Offering_Details like '%�%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...