如果查询包含等于6位数的子字符串,您如何建议在Sql Server 2010/2012中查找?
e.g。 " agh123456 dfsdfdf
"符合要求
" x123 ddd456
"不符合要求,因为6位不连续
" lm123
"不符合要求,因为只找到3位数(在所需的6位数之内)
到目前为止我遇到的问题是:SUBSTRING作为一个函数需要参数(数字大概开始的位置,这是随机的) 而PATINDEX返回字符串中模式的位置,但我们不知道确切的模式(它可以是任何6位数字)
任何指示或建议,非常感谢。
谢谢
答案 0 :(得分:12)
您可以使用LIKE运算符:
SELECT *
FROM MyTable
WHERE Mycolumn LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9]%'
答案 1 :(得分:0)
即使这应该有效..考虑到你没有像这样的字符串
abc123 abc123456
试试这个
DECLARE @str varchar(max) = 'abcxyz123456'
SELECT ISNUMERIC(SUBSTRING(@str,(SELECT PATINDEX('%[0-9]%',@str)),6))
答案 2 :(得分:0)
如果要选择表中的所有行并屏蔽每行中的第一个6位子字符串:
DECLARE @mask varchar(max) = '######'
DECLARE @pattern varchar(max) = '%'+REPLACE(@mask,'#','[0-9]')+'%'
SELECT
ISNULL(STUFF(col1,PATINDEX(@pattern,col1),LEN(@mask),@mask),col1)
FROM Table1