有这样一个字符串:
2∮11∮10∮09∮10∮13∮786∮91.93∮69∮100.00
我现在要提取第6个∮和第7个∮中间的数字786,该怎样写语句?

解决方案 »

  1.   

    如果字符串是不变的,可以用Substring()方法
      

  2.   

    --轉老大
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_GetStr]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_GetStr]
    GO
    --分段截取函数
    CREATE FUNCTION dbo.f_GetStr(
    @s varchar(8000),      --包含多个数据项的字符串
    @pos int,             --要获取的数据项的位置
    @split varchar(10)     --数据分隔符
    )RETURNS varchar(100)
    AS
    BEGIN
    IF @s IS NULL RETURN(NULL)
    DECLARE @splitlen int
    SELECT @splitlen=LEN(@split+'a')-2
    WHILE @pos>1 AND CHARINDEX(@split,@s+@split)>0
    SELECT @pos=@pos-1,
    @s=STUFF(@s,1,CHARINDEX(@split,@s+@split)+@splitlen,'')
    RETURN(ISNULL(LEFT(@s,CHARINDEX(@split,@s+@split)-1),''))
    END
    GOselect dbo.f_GetStr('2∮11∮10∮09∮10∮13∮786∮91.93∮69∮100.00 ',7,'∮')
    /*
    ----------------------------------------------------------------------------------------------------
    786(1 個資料列受到影響)*/
      

  3.   


    declare @tb table([ID] int,[STR] varchar(45))
    insert @tb
    select 1,'2∮11∮10∮09∮10∮13∮786∮91.93∮69∮100.00'
    SELECT [STR]
    FROM (
    SELECT a.id,
      [STR]=SUBSTRING(a.[STR],number,CHARINDEX('∮',a.[STR]+'∮',number)-b.number),ROW_NUMBER() OVER (ORDER BY GETDATE()) AS RID
    FROM @tb a
    JOIN master..spt_values b
    ON b.type='p' AND CHARINDEX('∮','∮'+a.[STR],number)=number
     ) A
    WHERE A.RID=7/*
    STR
    ---------------------------------------------
    786(1 row(s) affected)