0

我有一列名为'name' type char,如何打印名称中至少有一位/至少三位/恰好五位的值?例如:

Name
-----------
'name1'
'name2356'
'name12567'
  1. 至少一位数字将返回'name1', 'name2356' and 'name12567'
  2. 至少三位数将返回'name2356' and 'name12567'
  3. 正好五位数将返回'name12567'
4

2 回答 2

1
CREATE FUNCTION dbo.[udf_CountNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
    WHILE PATINDEX('%[^0-9]%', @strText) > 0
    BEGIN
        SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
    END
    RETURN LEN(@strText)
END

-- Greater than one
SELECT *
FROM Test
WHERE dbo.[udf_CountNumericCharacters]([Name]) > 1

-- Greater than three
SELECT *
FROM Test
WHERE dbo.[udf_CountNumericCharacters]([Name]) > 3

-- Exactly 5
SELECT *
FROM Test
WHERE dbo.[udf_CountNumericCharacters]([Name]) = 5

快速搜索将为您提供一百万种打印这些结果的不同方式。

于 2013-10-05T15:59:42.297 回答
0

您可以使用 UDF

create function dbo.HasDigits(@Text VarChar(80), @Digits int)
returns bit 
as
begin
   declare @i int = datalength(@text)
   while @i>=1 and @digits>0 begin
     if ISNUMERIC(substring(@text,@i,1))=1 
  set @digits=@digits-1
     else 
  set @i = 1
     set @i=@i - 1
   end

  return case when @digits>0 then 0 else 1 end
end

要使用它,请执行

select * from MyTable where dbo.HasDigits(Name,3) = 1
于 2013-10-05T15:50:04.603 回答