我在数据库中存储了类似5XXXXXX
的值,其中X
可以是任何数字。换句话说,我需要匹配传入的SQL查询字符串,如5349878
。
有没有人知道该怎么做?
我有不同的情况,比如XXXX7XX
,所以它必须是通用的。我不关心在SQL Server中以不同的方式表示模式。
我在.NET中使用c#。
答案 0 :(得分: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]'
答案 1 :(得分:20)
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}
为您的第二个例子有关正则表达式的更多信息,我强烈推荐this website。
答案 2 :(得分:6)
试试这个
select * from mytable
where p1 not like '%[^0-9]%' and substring(p1,1,1)='5'
当然,您需要调整子字符串值,但其余的应该有效......
答案 3 :(得分:1)
为了匹配数字,您可以使用[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]。我为邮政编码做了很多。
答案 4 :(得分:0)
SQL通配符足以达到此目的。请点击此链接:http://www.w3schools.com/SQL/sql_wildcards.asp
你需要使用这样的查询:
select * from mytable where msisdn like '%7%'
或
select * from mytable where msisdn like '56655%'