比如一个字符串
ZH2061101447,30100002,2007-01-24,11:12:22,112688549,SG186/U-NK--我想有没有这个函数就是从第二逗号开始截取,然后也可能从第三个逗号截取有这个函数,但是我忘记了~
提醒下~

解决方案 »

  1.   

    好像没有吧,你可以用substring 和charindex ,replace等组合使用来达到所要求的功能
      

  2.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_splitSTR]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_splitSTR]
    GO/*--字符串分函数分拆指定分隔符的的字符串,返回指定位置的字符--邹建 2004.04(引用请保留此信息)--*//*--调用示例SELECT 
    dbo.f_splitSTR(userinfo,'|||', 1) as 姓名,
    dbo.f_splitSTR(userinfo,'|||', 2) as 性格,
    dbo.f_splitSTR(userinfo,'|||', 3) as 手机,
    dbo.f_splitSTR(userinfo,'|||', 4) as 地址,
    dbo.f_splitSTR(userinfo,'|||', 5) as 其他
    FROM(
    SELECT userinfo = '张三|||温和|||手机|||通讯地址'
    )A
    --*/
    CREATE FUNCTION dbo.f_splitSTR(
    @s varchar(8000),   --要分拆的字符串
    @split varchar(10), --数据分隔符
    @pos int            -- 取第几个
    )RETURNS varchar(100)
    AS
    BEGIN
    DECLARE @splitlen int, @re varchar(100)
    SET @splitlen=LEN(@split+'a') - 2
    WHILE CHARINDEX(@split,@s) > 0 AND @pos > 0
    SELECT
    @re = LEFT(@s,CHARINDEX(@split,@s)-1),
    @s=STUFF(@s,1,CHARINDEX(@split, @s)+@splitlen,''),
    @pos = @pos - 1
    RETURN(CASE 
    WHEN @pos = 0 THEN @re 
    WHEN @pos = 1 THEN @s
    ELSE NULL END)
    END
    GO-- 调用
    SELECT 
    dbo.f_splitSTR(userinfo,'|||', 1) as 姓名,
    dbo.f_splitSTR(userinfo,'|||', 2) as 性格,
    dbo.f_splitSTR(userinfo,'|||', 3) as 手机,
    dbo.f_splitSTR(userinfo,'|||', 4) as 地址,
    dbo.f_splitSTR(userinfo,'|||', 5) as 其他
    FROM(
    SELECT userinfo = '张三|||温和|||手机|||通讯地址'
    )A
      

  3.   

    CREATE FUNCTION dbo.f_splitSTR(
    @s varchar(8000),   --要分拆的字符串
    @split varchar(10), --数据分隔符
    @pos int            -- 取第几个
    )RETURNS varchar(100)
    AS
    BEGIN
    DECLARE @splitlen int, @re varchar(100)
    SET @splitlen=LEN(@split+'a') - 2
    WHILE CHARINDEX(@split,@s) > 0 AND @pos > 0
    SELECT
    @re = LEFT(@s,CHARINDEX(@split,@s)-1),
    @s=STUFF(@s,1,CHARINDEX(@split, @s)+@splitlen,''),
    @pos = @pos - 1
    RETURN(CASE 
    WHEN @pos = 0 THEN @re 
    WHEN @pos = 1 THEN @s
    ELSE NULL END)
    END
    GO-- 调用
    SELECT 
    dbo.f_splitSTR(userinfo,',', 1) as c1,
    dbo.f_splitSTR(userinfo,',', 2) as c2,
    dbo.f_splitSTR(userinfo,',', 3) as c3,
    dbo.f_splitSTR(userinfo,',', 4) as c4,
    dbo.f_splitSTR(userinfo,',', 5) as c5,
    dbo.f_splitSTR(userinfo,',', 6) as c6
    FROM(
    SELECT userinfo = 'ZH2061101447,30100002,2007-01-24,11:12:22,112688549,SG186/U-NK')A