SQL Server模式匹配。正则表达式?

时间:2011-07-08 18:02:52

标签: sql-server sql-server-2005

我正在尝试在地址字段中搜索P.O Box。

这是最好的解决方案吗?

SELECT * 
FROM [Address] WITH (NOLOCK)
WHERE 
Addressline1   LIKE ('%p.o%box%')   OR 
Addressline1   LIKE ('%p.o.box%')   OR 
Addressline1   LIKE ('%po%box%')    OR 
Addressline1   LIKE ('%p o%box%')

我应该使用正则表达式吗?

由于 Jothish

1 个答案:

答案 0 :(得分:4)

LIKE关键字只具有类似RegEx的能力;请参阅http://msdn.microsoft.com/en-us/library/ms179859.aspx(只需单击“其他版本”即可获取SQL Server 2005的相应页面。)

您可以使用下划线'_'作为“单字符通配符”,例如“LIKE'%P_O_Box%'”表示“字母'P'后跟任意1个字符后跟'O'后跟任意1个字符后跟'Box'”。

您可以使用方括号'[]'来查找范围或字符集,例如“%P [。 ] O [。 ] Box%',意思是“'P'后跟一个空格或一个句号(没有别的),后跟'O',后跟一个空格或句号,然后是'Box'”。

旁注:比较字符串周围不需要括号。

但最终,正如billinkc建议的那样,如果可能的话,你应该在这个领域标准化数据。