在SQL中修复坏字符?

时间:2010-11-16 16:08:37

标签: sql-server sql-server-2008 data-migration

我有一个从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中使用生成脚本任务来生成一些插入,它显示了一些换行符。我刚刚用REPLACE进行了更新,一切都很顺利。谢谢大家!

2 个答案:

答案 0 :(得分:1)

我认为问题不会出现在名字后面的空白处。我不认为SQL Server会存储它。前导空间怎么样?

而且,是的,您可以通过编写表格中的数据来获取原始数据。在SSMS中,您可以在对象资源管理器中右键单击数据库名称,选择“任务”,然后选择“生成脚本...”这将允许您生成模式脚本和数据脚本。然后,您可以查看是否有前导或尾随空格。

答案 1 :(得分:0)

你也可以制作一个UDF来省略非alphanum字符。示例:

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'