исправление плохих символов в SQL? - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть база данных, которая была перенесена с Oracle на SQL Server.Одна из таблиц содержит данные типа:

Name
steve
mark
john
matt

, когда я делаю этот запрос:

select * from [TABLE] where Name = 'steve'

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

Можно ли как-нибудь отобразить более "необработанные" данные столбца, чтобы я мог попытаться выяснить, что это за неверные данные?

Спасибо

ОБНОВЛЕНИЕ:

Я немного изменил свой запрос и обнаружил кое-что интересное:

SELECT LEN(RTRIM(Name)) from [Table]

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

К сожалению, у меня есть некоторые значения, такие как:

steve
steve1
steve12

, поэтому я не могу просто перейти

where NAME like 'steve%' 

, так как это неправильно захватит все три строки.

ОБНОВЛЕНИЕ (РЕШЕНИЕ):

Да, это были символы char (13) + 10 .. Я использовал задачу создания сценариев в SSMS, чтобы сгенерировать некоторые вставки, и она показала некоторые символы новой строки.Я только что сделал ОБНОВЛЕНИЕ с ЗАМЕНА, и все хорошо.Спасибо всем!

Ответы [ 2 ]

1 голос
/ 16 ноября 2010

Не думаю, что проблема будет в пробеле после имени.Я не думаю, что SQL Server будет хранить это в любом случае.А как насчет начальных пробелов?

И, да, вы можете получить необработанные данные, записав их в таблицу.В SSMS вы можете щелкнуть правой кнопкой мыши на имени базы данных в обозревателе объектов, выбрать Задачи, а затем Создать сценарии ... Это позволит вам создать сценарий схемы и сценарий данных.Затем вы можете увидеть, есть ли у вас начальные или конечные пробелы.

0 голосов
/ 16 ноября 2010

Вы также можете сделать UDF, чтобы опустить не алфавитные символы.Пример:

Create Function dbo.ReplaceNonAlphaNum(@val varchar(255)) Returns Varchar(255)
BEGIN
   DECLARE @index int

   Set @index = patindex('%[^a-z0-9_]%',@val)
   While @index > 0 
   Begin
      Set @val = stuff(@val,@index,1,'')
      Set @index = patindex('%[^a-z0-9_]%',@val)
   End

   Return @val
END
GO

Grant Exec on dbo.ReplaceNonAlphaNum to Public
GO

-- Test
SELECT dbo.ReplaceNonAlphaNum('_abc@#!123^')
--should give a result of: 'abc123'
...