创建SQL'LIKE'语句,查找特定的数字和字母模式

时间:2010-06-16 15:33:38

标签: sql sql-server sql-server-2008 sql-like

是否可以在SQL查询中使用LIKE来查找数字和字母的模式。我需要找到特定字段数据具有模式的所有记录(2个数字,1个连字符,3个字母)## - AAA我正在使用SSMS与SQL Server 2008.任何帮助将不胜感激。感谢。

5 个答案:

答案 0 :(得分:11)

我认为LIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%'应该有效。

我不确定您的区分大小写要求,但您可以按照以下方式使用COLLATE。

select * from
(
SELECT 'GHSASKJK' AS T UNION ALL
SELECT 'HGGH11-ABC'  UNION ALL
SELECT 'HGGH11-abc' 
) f
WHERE T LIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%' COLLATE Latin1_General_CS_AS

答案 1 :(得分:6)

您还应该可以使用PATINDEX完成此操作。

Select *
From Table
Where PatIndex( '%[0-9][0-9]-[A-Z][A-Z][A-Z]%', Value) > 0

答案 2 :(得分:4)

如果数据完全是“## - AAA”,则可以使用LIKE '[0-9][0-9]-[A-Z][A-Z][A-Z]'。如果数据在某处包含此序列,请使用LIKE '%[0-9][0-9]-[A-Z][A-Z][A-Z]%'

请注意,如果您的列已编入索引,LIKE '[0-9][0-9]-[A-Z][A-Z][A-Z]'可以很多比任何UFD或CLR正则表达式更快,因为SQL Server更好地理解LIKE,它可以更多如果它永远不匹配,则可以轻松跳过部分索引。例如,所有以0-9之外的字符开头的记录都将立即被忽略,而UDF或CLR正则表达式仍然会读取这些值。

答案 3 :(得分:2)

我建议用.Net创建一个CLR程序集。这样你就可以创建一个可以使用正则表达式的函数或SP。

http://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/

编辑:即使可以通过LIKE完成,如其他答案中所述,我仍然建议您创建程序集。如果您的数据由于某种原因而发生变化,并且您需要一种查找数据的高级方法,那么此正则表达式程序集将能够适应更改

答案 4 :(得分:2)

您应该可以使用类似搜索。您的where子句类似于:

Where YourColumnName Like '%[0-9][0-9]-[a-z][a-z][a-z]%'

***这假设不区分大小写的排序规则