繁体   English   中英

SQL Server 中的正则表达式

[英]Regular expressions inside SQL Server

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

有谁知道该怎么做?

例如,我有不同的情况,例如XXXX7XX ,因此它必须是通用的。 我不关心在 SQL Server 内部以不同的方式表示模式。

我在 .NET 中使用 c#。

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

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

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}对于您的第二个示例

有关正则表达式的更多信息,我强烈推荐这个网站

尝试这个

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

当然,您需要调整子字符串值,但其余的应该可以工作...

为了匹配数字,您可以使用[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] 对于邮政编码,我经常这样做。

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

你需要使用这样的查询:

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

或者

select * from mytable where msisdn like '56655%'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM