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

Sql 查找字符串中是否有6位数字,sql,sql-server,Sql,Sql Server,您建议如何在Sql Server 2010/2012中找出查询是否包含等于6位数字的子字符串 e、 g.“agh123456 DFSDFD”符合要求 “x123 ddd456”与要求不匹配,因为6位数字不连续 “lm123”与要求不匹配,因为只找到3位数字(在要求的6位数字中) 到目前为止,我遇到的问题是:子字符串作为一个函数需要参数(数字可能开始的位置,这是随机的) 虽然PATINDEX以字符串形式返回模式的位置,但我们不知道确切的模式(可以是任何6位数字) 任何指点或建议,不胜感激 谢谢您可

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

e、 g.“
agh123456 DFSDFD
”符合要求

x123 ddd456
”与要求不匹配,因为6位数字不连续

lm123
”与要求不匹配,因为只找到3位数字(在要求的6位数字中)

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

任何指点或建议,不胜感激

谢谢

您可以使用操作员:

SELECT *
FROM MyTable
WHERE Mycolumn LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9]%'

即使这样也应该行。。考虑到你没有这样的绳子

abc123 abc123456

试试这个

DECLARE @str varchar(max) = 'abcxyz123456'

SELECT ISNUMERIC(SUBSTRING(@str,(SELECT PATINDEX('%[0-9]%',@str)),6))

如果要选择表中的所有行并屏蔽每行中的前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

我只是想用字符或符号替换数字,比如&并检查字符串中是否有&&&&&&&。如果有更优雅的解决方案,请顺便告诉我,你知道如何在一个“替换”函数中一次替换所有数字(这样我就不必对每个数字使用10个“替换”)?感谢您是否要从输出中删除6位数字?可能与如何查找6位或更多数字重复?@sgedes Haha只需几秒钟!我认为这将匹配7位数字,而不是6位。@AnkitBajpai很好!显然,我对Ctrl-V:)@DavidG的渴望太强烈了,而你在回答Ankit的时候我纠正了:)我看了历史,犯了错误。我的错,对不起,这将与至少6位数字匹配。如果用户恰好需要6位数字,则需要更改查询。