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} 为你的第二个例子有关正则表达式的更多信息,我强烈推荐这个网站.
试试这个
select * from mytable
where p1 not like '%[^0-9]%' and substring(p1,1,1)='5'
Run Code Online (Sandbox Code Playgroud)
当然,你需要调整子串值,但其余的应该工作......