我有一个从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进行了更新,一切都很顺利。谢谢大家!
答案 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'