T-SQL查找带有单个换行符的字符串(缺少回车符)

时间:2014-03-07 21:38:45

标签: sql sql-server tsql

我一直在四处寻找,我也发现了类似的问题,但我找不到我想要的东西。

有一些输入错误或其他情况发生在有最终只有一个换行字符的表 - CHAR(10)之前没有回车符 - CHAR(13),这是正确的格式。我已经解析了行,发现有些人有CR / LF和/或孤立的LF。

如何查找包含两者 CR / LF和孤立LF字符的字符串?

这是我到目前为止的代码

SELECT 
    example.ID
    , example.DESCRIPTION
    WHERE 
    example.DESCRIPTION LIKE '%' + CHAR(10) + '%'
    AND example.DESCRIPTION NOT LIKE '%' + CHAR(13) + CHAR(10) + '%'

查找仅包含 单独LF字符的字符串,而不是两者

我也尝试了

的变体
DESCRIPTION LIKE '%[^CHAR(13)][CHAR(10)]%' 
没有任何运气。帮助

编辑:如果不清楚,正确的格式是CR / LF或 CHAR (13) CHAR (10)。

2 个答案:

答案 0 :(得分:1)

这应该有效。使用PATINDEX比LIKE更复杂的字符串匹配:

DECLARE @T TABLE (S varchar(100))
DECLARE @PAT varchar(10)

SET @PAT = '%[^'+ CHAR(13) + ']' + CHAR(10) + '%'

INSERT INTO @T
VALUES
('AAA')
,('BBB' + CHAR(13) + CHAR(10) + 'BBB')
,('CCC' + CHAR(10) + 'CCC')

SELECT * FROM @T AS t
WHERE PATINDEX(@PAT, S) > 0

答案 1 :(得分:0)

SELECT
  example.ID
, example.DESCRIPTION
FROM MyTable
WHERE example.DESCRIPTION LIKE '%'+CHAR(13)+CHAR(10)+'%'         --contains CRLF 
  AND (example.DESCRIPTION LIKE CHAR(10)+'%'                     --AND (starts with LF
    OR example.DESCRIPTION LIKE '%[^'+CHAR(13)+']'+CHAR(10)+'%') --     OR contains [^CR]LF)