SQL Server中的正则表达式

时间:2009-12-26 19:22:46

标签: sql sql-server regex expression

我在数据库中存储了类似5XXXXXX的值,其中X可以是任何数字。换句话说,我需要匹配传入的SQL查询字符串,如5349878

有没有人知道该怎么做?

我有不同的情况,比如XXXX7XX,所以它必须是通用的。我不关心在SQL Server中以不同的方式表示模式。

我在.NET中使用c#。

5 个答案:

答案 0 :(得分:31)

您可以在SQL Server中编写这样的查询:

--each [0-9] matches a single digit, this would match 5xx
SELECT * FROM YourTable WHERE SomeField LIKE '5[0-9][0-9]'

答案 1 :(得分:20)

  

DB中的存储值为:5XXXXXX [其中x可以是任何数字]

您没有提及数据类型 - 如果是数字,您可能必须使用CAST / CONVERT将数据类型更改为[n] varchar。

使用:

WHERE CHARINDEX(column, '5') = 1
  AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
  AND ISNUMERIC(column) = 1

参考文献:

  

我也有不同的情况,例如XXXX7XX,所以它必须是通用的。

使用:

WHERE PATINDEX('%7%', column) = 5
  AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
  AND ISNUMERIC(column) = 1

参考文献:

正则表达式支持

SQL Server 2000+支持正则表达式,但问题是您必须先在CLR中创建UDF函数才能使用。有许多文章提供示例代码,如果你谷歌他们。完成后,您可以使用:

    第一个例子
  • 5\d{6}
  • \d{4}7\d{2}为您的第二个例子

有关正则表达式的更多信息,我强烈推荐this website

答案 2 :(得分:6)

试试这个

select * from mytable
where p1 not like '%[^0-9]%' and substring(p1,1,1)='5'

当然,您需要调整子字符串值,但其余的应该有效......

答案 3 :(得分:1)

为了匹配数字,您可以使用[0-9]。所以你可以使用5 [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]和[0-9] [0-9] [0-9 ] [0-9] 7 [0-9] [0-9] [0-9]。我为邮政编码做了很多。

答案 4 :(得分:0)

SQL通配符足以达到此目的。请点击此链接:http://www.w3schools.com/SQL/sql_wildcards.asp

你需要使用这样的查询:

select * from mytable where msisdn like '%7%'

select * from mytable where msisdn like '56655%'