SQL检索4个数字

时间:2018-03-25 10:59:50

标签: sql-server

如何在Microsoft SQL Server中检索包含4个数字的行?

此查询返回超过4个数字的字符串

SELECT * 
FROM table 
WHERE Name LIKE '%[0-9][0-9][0-9][0-9]%';

2 个答案:

答案 0 :(得分:0)

SQL Server在字符串操作方面特别糟糕,可能是为了推广Microsoft的客户端工具,如C#或Reporting Server。请参阅示例this question from 2009。因此,理智的解决方案涉及创建CLR UDF

但你仍然可以在T-SQL中用很多技巧来做。例如,您可以创建一个用户定义的函数来删除字符串中的所有数字:

create function dbo.StripNumbers(@str nvarchar(max))
returns nvarchar(max)
as begin
  declare @i int = patindex('%[0-9]%', @str)
  while @i > 0
    begin
    set @str = stuff(@str, @i, 1, '')
    set @i = patindex('%[0-9]%', @str)
    end
  return @str
end

然后你可以过滤掉剥离后短4个字符的字符串:

select  *
from    YourTable
where   len(dbo.StripNumbers(txt)) = len(txt) - 4

Working example at SQL Fiddle.

答案 1 :(得分:0)

您可以使用通配符:

select  *
from    Table
where   Name like '%[0-9]%[0-9]%[0-9]%[0-9]%'
        and Name not like '%[0-9]%[0-9]%[0-9]%[0-9]%[0-9]%'