SQL Server中的正则表达式

Jac*_*ack 25 regex sql sql-server expression

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

有谁知道怎么做?

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

我在.NET中使用c#.

dan*_*dan 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]'
Run Code Online (Sandbox Code Playgroud)


OMG*_*ies 21

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
Run Code Online (Sandbox Code Playgroud)

参考文献:

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

使用:

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

参考文献:

正则表达式支持

SQL Server的2000+支持正则表达式,但前提条件是你有你有能力之前创建的CLR的UDF功能.有许多文章提供示例代码,如果你谷歌他们.一旦你有了这个,你可以使用:

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

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


Spa*_*rky 6

试试这个

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

当然,你需要调整子串值,但其余的应该工作......