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






  • 相关阅读:
    单文档程序结构
    如何从一个对话框弹出单文档视图
    MFC 窗口居中显示 VS2010
    在单文档中显示我的第一个对话框
    在MFC中添加用户自定义消息
    MFC动态创建控件及添加消息响应
    MFC的DLL
    MFC多线程
    MFC的UDP编程实现
    MFC下CSocket编程详解
  • 原文地址:https://www.cnblogs.com/wghao/p/980996.html
Copyright © 2011-2022 走看看