【发布时间】:2010-12-30 03:57:20
【问题描述】:
我在我的数据库中存储了类似于5XXXXXX 的值,其中X 可以是任何数字。换句话说,我需要匹配传入的 SQL 查询字符串,例如 5349878。
有人知道怎么做吗?
我有不同的情况,例如XXXX7XX,所以它必须是通用的。我不关心在 SQL Server 中以不同的方式表示模式。
我在 .NET 中使用 c#。
【问题讨论】:
标签: sql sql-server regex expression
我在我的数据库中存储了类似于5XXXXXX 的值,其中X 可以是任何数字。换句话说,我需要匹配传入的 SQL 查询字符串,例如 5349878。
有人知道怎么做吗?
我有不同的情况,例如XXXX7XX,所以它必须是通用的。我不关心在 SQL Server 中以不同的方式表示模式。
我在 .NET 中使用 c#。
【问题讨论】:
标签: sql sql-server regex expression
您可以在 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 通配符足以达到此目的。请点击此链接:http://www.w3schools.com/SQL/sql_wildcards.asp
您需要使用这样的查询:
select * from mytable where msisdn like '%7%'
或
select * from mytable where msisdn like '56655%'
【讨论】:
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。
【讨论】:
%7% 会出现多次或者 PATINDEX 只返回第一次出现,这是否也有效?例如。 X7XX7XX,PATINDEX 会不会返回 1 而不是 5?
试试这个
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]。我经常为邮政编码这样做。
【讨论】: