早上上班時,有位同事問我能不能使用sql腳本 截取字符串中特定數字,比如是想獲取特定字符後面的數字,比如獲取ID:後的數字。我廢話不多說直接貼代碼。
declare @str varchar(100),@str2 varchar(100)
set @str= '{ID:123,name:生活資訊網,url:http://www.naoqiu.com}'
--如果是想獲取特定字符後面的數字,比如獲取ID:後的數字
set @str=substring(@str,patindex('%ID:[0-9]%',@str),len(@str))
--得到以第一個數字開始的字符串
select @str2=substring(@str,patindex('%[0-9]%',@str),len(@str))
--得到第一個非數字開始的位置,並根據此位置刪除其及以後的字符
,@str2=left(@str2,patindex( '%[^0-9]%',@str2)-1)
select @str2
go
順便我也貼個自己編寫的函數 提取截取字符串中數字,字母。腳本如下:
--=======================
--截取字符串中所有的數字
--SELECT dbo.Fun_GetNum('{ID:123,name:生活資訊網,url:http://www.naoqiu.com}')
--=======================
CREATE function dbo.Fun_GetNum( @No NVARCHAR(4000))
RETURNS INT
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@No)>0 BEGIN
SET @No=STUFF(@No,PATINDEX('%[^0-9]%',@No),1,'')
END
RETURN CONVERT(INT,@No)
END
go
--=======================
--截取字符串中所有的字母
--SELECT dbo.Fun_GetLetter('{ID:123,name:生活資訊網,url:http://www.naoqiu.com}')
--=======================
Create function dbo.Fun_GetLetter(@Letter NVARCHAR(4000))
RETURNS NVARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^A-Z]%',@Letter)>0 BEGIN
SET @Letter=STUFF(@Letter,PATINDEX('%[^A-Z]%',@Letter),1,'')
END
RETURN @Letter
END
go