[英]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.