我有一列名为'name' type char,如何打印名称中至少有一位/至少三位/恰好五位的值?例如:
Name
-----------
'name1'
'name2356'
'name12567'
- 至少一位数字将返回
'name1', 'name2356' and 'name12567'
- 至少三位数将返回
'name2356' and 'name12567'
- 正好五位数将返回
'name12567'
我有一列名为'name' type char,如何打印名称中至少有一位/至少三位/恰好五位的值?例如:
Name
-----------
'name1'
'name2356'
'name12567'
'name1', 'name2356' and 'name12567'
'name2356' and 'name12567'
'name12567'
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
快速搜索将为您提供一百万种打印这些结果的不同方式。
您可以使用 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