zoukankan      html  css  js  c++  java
  • 字符串分割自定义函数(SQL)

    今天博客园中看到一朋友写的SQL中分割字符串函数:
    http://www.cnblogs.com/czwand/archive/2007/11/21/966910.html
    在回帖中看到一朋友说到:
    select * from dbo.split('01__02__03','__')
    发生错误,返回的结果不是我们原本要的结果:
    -------------------
    --想要的结果
    01
    02
    03
    -----------------
    --实际结果:
    01
    _02
    _03

    以前我也写过类似的字符串分割自定义函数,也没有想过上面出现的这样问题。
    我原来的函数是这样的:

    /*
    StringToTable
    */
    CREATE FUNCTION StringToTable(@StringX varchar(8000),@Split nvarchar(10))
    RETURNS @TableResult TABLE(TableID nvarchar(20))
    AS  
    BEGIN
        DECLARE @Index int
        SET @Index=CHARINDEX(@Split,@StringX,1)
        WHILE (@Index>=1)
            BEGIN
                INSERT INTO @TableResult SELECT LEFT(@StringX,@Index-1)
                SELECT

    @StringX=RIGHT(@StringX,LEN(@StringX)-@Index),@Index=CHARINDEX(@Split,@StringX,1)
            END    
        IF(@StringX<>'') INSERT INTO @TableResult SELECT @StringX
        RETURN
    END



    使用类似的select * from dbo.split('01__02__03','__') 一样出问题。
    经过一下的修改就可以了,修改后程序为:

    /*
    StringToTable
    */
    CREATE FUNCTION StringToTable(@StringX varchar(8000),@Split nvarchar(10))
    RETURNS @TableResult TABLE(TableID nvarchar(20))
    AS  
    BEGIN
        DECLARE @Index int
        DECLARE @LenIndex int
        SELECT @LenIndex=LEN(@Split),@Index=CHARINDEX(@Split,@StringX,1)
        WHILE (@Index>=1)
            BEGIN
                INSERT INTO @TableResult SELECT LEFT(@StringX,@Index-1)
                SELECT

    @StringX=RIGHT(@StringX,LEN(@StringX)-@Index-@LenIndex+1),@Index=CHARINDEX(@Split,@Stri

    ngX,1)
            END    
        IF(@StringX<>'') INSERT INTO @TableResult SELECT @StringX
        RETURN
    END






  • 相关阅读:
    [BZOJ1620][Usaco2008 Nov]Time Management 时间管理
    [BZOJ1634][Usaco2007 Jan]Protecting the Flowers 护花
    [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排
    [BZOJ1708][Usaco2007 Oct]Money奶牛的硬币
    [BZOJ1690][Usaco2007 Dec]奶牛的旅行
    fzu 2132 LQX的作业
    fzu 2139 久违的月赛之二
    poj 1849 Two 树形dp
    师范大学 e: skyscrapers
    O(∩_∩)O~~
  • 原文地址:https://www.cnblogs.com/wghao/p/980996.html
Copyright © 2011-2022 走看看