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






  • 相关阅读:
    c#判断输入的是不是数字
    params 关键字载入空值的陷阱
    拆箱陷阱
    接口的概念和声明
    数据库
    ios 纵向的UISlider
    微信小程序学习网站
    Spark RDD(2)
    SparkSql
    廖雪峰老师学习网站
  • 原文地址:https://www.cnblogs.com/wghao/p/980996.html
Copyright © 2011-2022 走看看