【问题标题】:SQL select to get a string between two Special CharactersSQL选择获取两个特殊字符之间的字符串
【发布时间】:2016-01-18 07:37:36
【问题描述】:

我有 ABC_DEF_123,DEF_GHI_345,GHI_JKL_678 这样的数据 我需要在“,”和“”之间选择 123,345,678(即) 如何在“,”和最后一个“”之间进行选择 数据不是静态的。 帮帮我... 提前致谢

【问题讨论】:

    标签: sql sql-server-2008 stored-procedures


    【解决方案1】:

    尝试下面的代码,尝试将下面的代码包装在函数中

    DECLARE @string NVARCHAR(MAX)='ABC_DEF_123,DEF_GHI_345,GHI_JKL_678'
    DECLARE @delimiter CHAR(1)=','
    DECLARE @output TABLE(splitdata NVARCHAR(MAX) )
    BEGIN 
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1 BEGIN 
        IF @end = 0  
            SET @end = LEN(@string) + 1
    
        INSERT INTO @output (splitdata)  
        VALUES(SUBSTRING(@string, @start, @end - @start)) 
        SET @start = @end + 1 
        SET @end = CHARINDEX(@delimiter, @string, @start)
    
    END 
    --
    DECLARE @values NVARCHAR(max)=''
    SELECT @values=RIGHT(splitdata,3)+','+@values FROM @output ORDER BY splitdata DESC
    
    SELECT  (SUBSTRING(@values,0,LEN(@values))) 
    END
    

    【讨论】:

    • 上述查询的输出是:678,345,123。但 reqd 输出为 123,345,678。为此将最后两行修改为: SELECT @values=@values+','+RIGHT(splitdata,3) FROM @output SELECT (SUBSTRING(@values,2,LEN(@values)+1))
    • 您可以使用REVERSE 函数代替。我已经更新了 Ans。
    • 请检查您的查询。现在输出是 321,543,876
    【解决方案2】:

    试试下面可能对你有帮助的脚本

    选择右('ABC_DEF_123',3)作为数据值

    选择子串('ABC_DEF_123',patindex('%[0-9]%','ABC_DEF_123'),len('ABC_DEF_123'))

    【讨论】:

      猜你喜欢
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多