在尝试识别错误数据时(通常需要手动查看和删除),我想要一种简单的方法来查看隐藏的字符,例如TAB,空格,回车符和换行符.这有内置的方式吗?
在这里关于stackoverflow的类似问题中,关于Oracle,建议使用DUMP(fieldname)函数,但我不知道即使SQL Server中存在相应的函数,这是否会使事情变得更容易,因为我需要查看字符在他们的背景下.
我能提出的最好的想法是用可见的替换预期的隐藏字符,如下所示:
SELECT REPLACE(REPLACE(REPLACE(REPLACE(myfield, ' ', '?'), CHAR(13), '[CR]'), CHAR(10), '[LF]'), CHAR(9), '[TAB]') FROM mytable
有没有更好的办法?我不喜欢这种方式,因为可能有其他不太常见的隐藏字符,我没有考虑,如垂直TAB等...打开"显示隐藏的字符",你几乎可以在任何文本编辑器中,在SQL Server查询分析器中这将是一个很好的功能,所以我几乎可以期望它可以在SQL服务器中以某种方式完成...或者至少有人有比我更好的想法,以显示这种白色空间信息.
我只是注意到有一种内置的方式来查看"空白",而不是在SQL查询分析器中,而是在曾经是SQL Enterprise管理器的界面部分.右键单击SQL Management Studio对象资源管理器树中的表,然后选择"编辑前200行".在结果中,空白区域(至少CR LF)作为空方块可见.
在TSQL patindex中CHAR(13)或CHAR(14)有什么问题?一旦我在模式中包含CHAR(14),我就找不到记录.寻找答案,我刚从2009年找到了我自己的问题(未答复)(此处:http://www.sqlservercentral.com/Forums/Topic795063-338-1.aspx).
这是另一个简单的测试,以显示我的意思:
/* PATINDEX TEST */
DECLARE @msg NVARCHAR(255)
SET @msg = 'ABC' + NCHAR(13) + NCHAR(9) + 'DEF'
DECLARE @unwanted NVARCHAR(50)
-- unwanted chars in a "chopped up" string
SET @unwanted = N'%[' + NCHAR(1) + '-' + NCHAR(13) + NCHAR(14) + '-' + NCHAR(31) + ']%'
SELECT patindex(@unwanted, @msg)
Run Code Online (Sandbox Code Playgroud)
- 结果:4
-- NOW LET THE unwanted string includ the whole range from 1 to 31
SET @unwanted = '%['+NCHAR(1)+'-'+NCHAR(31)+']%' -- -- As soon …Run Code Online (Sandbox Code Playgroud)