很奇怪,有什么简单的方法来过滤某些字符串而不是使用以下方法:
示例:对于AccountNumber
属性,应该允许恰好10位数作为值,例如0123456789
,
因此对于我所做的查询:
@input like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
我只是想知道有没有其他方法来编写此查询?对于那些需要精确100位数的值,没有人想在保持粘贴[0-9]的同时计数,对吧?我注意到C#中存在类似^(\ d {10})$的东西,但我在TSQL中找不到这样的匹配方法,是否存在类似的方法?
答案 0 :(得分:5)
你的逻辑很好。你也可以这样写:
where len(AccountNumber) = 10 and AccountNumber not like '%[^0-9]%'
即,长度为10,不包含任何不是数字的字符。
答案 1 :(得分:1)
您可以使用
@input like REPLICATE('[0-9]',10) COLLATE Latin1_General_100_BIN2
显式collate子句是因为在某些排序规则中,范围将匹配things that aren't strictly digits.