0

「name」タイプの char という列がありますが、名前に少なくとも 1 桁 / 少なくとも 3 桁 / 正確に 5 桁の値を出力するにはどうすればよいですか? 例えば:

Name
-----------
'name1'
'name2356'
'name12567'
  1. 少なくとも 1 桁が返されます'name1', 'name2356' and 'name12567'
  2. 少なくとも 3 桁が返されます'name2356' and 'name12567'
  3. 正確に 5 桁が返されます'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 に答える