查找字符串中是否有6位数字

时间:2014-09-17 14:45:16

标签: sql sql-server

如果查询包含等于6位数的子字符串,您如何建议在Sql Server 2010/2012中查找?

e.g。 " agh123456 dfsdfdf"符合要求

" x123 ddd456"不符合要求,因为6位不连续

" lm123"不符合要求,因为只找到3位数(在所需的6位数之内)

到目前为止我遇到的问题是:SUBSTRING作为一个函数需要参数(数字大概开始的位置,这是随机的) 而PATINDEX返回字符串中模式的位置,但我们不知道确切的模式(它可以是任何6位数字)

任何指示或建议,非常感谢。

谢谢

3 个答案:

答案 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