34,873
社区成员
发帖
与我相关
我的任务
分享--> 测试数据:@tb
declare @tb table([col] varchar(20))
insert @tb
select '132*345*789ABC' union all
select 'dfd*fd*fdf754' union all
select 'dfd1*21*fda489(dfda)' union all
select '29*das2*(fda)123'
select substring(stuff('a'+reverse(substring(reverse(col),1,charindex('*',reverse(col))-1)),
1,PATINDEX('%[0-9]%','a'+reverse(substring(reverse(col),1,charindex('*',reverse(col))-1)))-1,'')+'a',
1,PATINDEX('%[^0-9]%',stuff('a'+reverse(substring(reverse(col),1,charindex('*',reverse(col))-1)),
1,PATINDEX('%[0-9]%','a'+reverse(substring(reverse(col),1,charindex('*',reverse(col))-1)))-1,'')+'a')-1) from @tb
/*
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
789
754
489
123
(4 行受影响)
*/CREATE TABLE TB ([COL] VARCHAR(30))
INSERT TB
SELECT '132*345*789ABC' UNION ALL
SELECT 'dfd*fd*fdf754' UNION ALL
SELECT 'dfd1*21*fda489(dfda)' UNION ALL
SELECT '29*das2*(fda)123xxx256'
GO
CREATE FUNCTION F_GETDIGITS(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @T VARCHAR(100)
SET @T=''
WHILE PATINDEX('%[0-9]%',@S)>0
BEGIN
SET @T=@T+SUBSTRING(@S,PATINDEX('%[0-9]%',@S),1)
SET @S=STUFF(@S,1,PATINDEX('%[0-9]%',@S),'')
IF PATINDEX('%[^0-9]%',LEFT(@S,1))>0
BREAK
END
RETURN @T
END
GO
SELECT dbo.F_GETDIGITS(REVERSE(SUBSTRING(REVERSE(COL),1,CHARINDEX('*',REVERSE(COL))-1)))
FROM TB
DROP TABLE TB
DROP FUNCTION F_GETDIGITS
/*
789
754
489
123
*/