SQL Server中的正则表达式

SQL Server中的正则表达式,sql,sql-server,regex,expression,Sql,Sql Server,Regex,Expression,我在数据库中存储的值看起来像5xxxxx,其中X可以是任何数字。换句话说,我需要匹配传入的SQL查询字符串,如5349878 有人知道怎么做吗 我有不同的案例,比如XX7XX,所以它必须是通用的。我不关心在SQL Server中以不同的方式表示模式 我正在.NET中使用c。您可以在SQL Server中编写如下查询: --each [0-9] matches a single digit, this would match 5xx SELECT * FROM YourTable WHERE So

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

有人知道怎么做吗

我有不同的案例,比如XX7XX,所以它必须是通用的。我不关心在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]'

SQL通配符就足够了。请点击此链接:

您需要使用如下查询:

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

数据库中的存储值为:5xxxxx[其中x可以是任何数字]

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

使用:

参考资料:

我也有不同的案例,比如XX7XX,所以它必须是通用的

使用:

参考资料:

正则表达式支持 SQLServer2000+支持正则表达式,但关键是必须先在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]7[0-9][0-9][0-9]。我经常这样做是为了邮政编码。

谢谢回复!这些查询将为我提供许多不需要的匹配项。%7%的人也会匹配3373,这对我来说不是一个很好的匹配。56655%也会匹配56655444333,这对我来说又不是一个很好的匹配。查询本身必须使用固定的数字。数据库本身必须有这种模式。有这样的吗?@有。您可以使用len函数。从mytable中选择*msisdn,如'56655%'和lenmsisdn=10我还没有完全检查它,但我看起来是一个非常好的答案。我想你帮了我很多。非常感谢你!一个小的细节,即数字将考虑小数点有效,因此5123.45的表达式将通过等号检查,但可能不符合您的criteria@Sparky:True,更新答案并添加注释以排除必要的答案。SQL Server 2005+包括CLR,2000不适用。如果模式%7%将出现多次,或者PATINDEX仅返回第一次出现,这是否也适用?例如,X7XX7XX,PATINDEX是否不返回1而不是5?
WHERE CHARINDEX(column, '5') = 1
  AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
  AND ISNUMERIC(column) = 1
WHERE PATINDEX('%7%', column) = 5
  AND CHARINDEX(column, '.') = 0 --to stop decimals if needed
  AND ISNUMERIC(column) = 1
select * from mytable
where p1 not like '%[^0-9]%' and substring(p1,1,1)='5'