MSSQLは文字列の中のアルファベット、数字と特定の数字を切り取ります


朝出勤する時、ある同僚は私に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),@str)--最初の数字から始まる文字列select@str 2=substring(@str,patindex('%[0-9]%',@str),len(@str)を取得したい場合--最初の数字以外の開始位置を取得し、それ以降の文字を削除します.@str 2=left(@str 2,patindex('%[^0-9]%',@str 2)-1)select@str 2 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