SQL中的正则表达式

时间:2011-12-14 18:17:04

标签: sql sql-server regex database sql-server-2008

我很好奇你是否以及如何使用正则表达式在SQL语句中查找空格。

我有一个字符串,在实际字符串后可以有无限量的空格。

例如:


"STRING  "
"STRING "

会匹配,但

 
"STRING A"
"STRINGB"

不会。

现在我有:

like 'STRING%'

并不能完全归还我想要的结果。

我正在使用Sql Server 2008。

5 个答案:

答案 0 :(得分:4)

一个简单的例子可以在最后找到任何带空格的字符串:

where col1 like '% '

还允许制表符,回车符或换行符:

where col1 like '%[ ' + char(9) + char(10) + char(13) + ']'

根据你的评论,找到“string”后跟任意数量的空格:

where rtrim(col1) = 'string'

答案 1 :(得分:0)

你可以尝试

where len(col1) <> len(rtrim(col1))

答案 2 :(得分:0)

Andomar的回答会找到适合你的字符串,但我的蜘蛛侠意识告诉我,问题的范围可能大于找到空白。

如果我怀疑你正在寻找空白以便你可以清理它,那就简单了

UPDATE Table1
SET col1 = RTRIM(col1)

将从列中删除任何尾随空格。

或RTRIM(LTRIM(col1))删除前导空格和尾随空格。

或者REPLACE(col1,''。'')删除所有空格,包括字符串中的空格。

请注意,RTRIM和LTRIM仅适用于空格,因此要删除制表符/ CR / LF,您必须使用REPLACE。仅从字符串的前导/尾部删除那些是可行的,但不是很简单。您的数据库供应商错误地实现了ANSI SQL 99标准TRIM函数,这将使这更容易。

答案 3 :(得分:0)

where len(col1 + 'x') <> len(rtrim(col1)) + 1

答案 4 :(得分:0)

BOL为带有尾随空格的LEN()提供了变通方法:http://msdn.microsoft.com/en-us/library/ms190329.aspx

LEN(列+'_') - 1

或使用DATALENGTH