【问题标题】:SubString across different string lengths跨不同字符串长度的子字符串
【发布时间】:2017-11-15 06:01:59
【问题描述】:

我有以下 SUBSTRING 命令:

RTRIM(LTRIM(SUBSTRING(FileName, CHARINDEX('-', FileName, 0)+1, CHARINDEX('-', FileName, 0)-7 )))

并具有如下文件路径:

"C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf"    returns "V0001514"
"C:\James\test(100) - V0001585 MRS A SMITH.pdf  returns "V0001585 MR"

第一个返回正确的结果,但第二个返回额外的字符。有没有人看到确保 V* 号码始终正确返回的方法?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    问题是您已将数据长度固定为 -7

    你可以试试:

    SELECT SUBSTRING (@DATA, CHARINDEX('-', @DATA)+1, 
               CHARINDEX(' ', LTRIM(SUBSTRING(@DATA, CHARINDEX('-', @DATA)+1, LEN(@DATA)))))
    

    结果:

    "C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf"    returns "V0001514"
    "C:\James\test(100) - V0001585 MRS A SMITH.pdf  returns "V0001585"
    

    【讨论】:

    • 谢谢,这似乎给了我基于格式的最佳结果。
    【解决方案2】:

    你可以使用这个公式。

    RTRIM(LTRIM(SUBSTRING(FileName, CHARINDEX('-', FileName, 0)+1, 7 )))
    

    示例:

    DECLARE @FileName1 VARCHAR(255) = 'C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf"    returns "V0001514'
    
    DECLARE @FileName2 VARCHAR(255) = 'C:\James\test(100) - V0001585 MRS A SMITH.pdf  returns "V0001585 MR'
    
    
    SELECT 
    RTRIM(LTRIM(SUBSTRING(@FileName1, CHARINDEX('-', @FileName1, 0)+1, 7 ))) F1,
    RTRIM(LTRIM(SUBSTRING(@FileName2, CHARINDEX('-', @FileName2, 0)+1, 7 ))) F2
    

    结果:

    F1      F2
    ------- -------
    V00015  V00015
    

    【讨论】:

      【解决方案3】:

      尝试以下方法,希望对您有所帮助:

      DECLARE @FileName VARCHAR(100)='C:\James\AAA(9) - V0001514 MR J BLOGGS.pdf'
      SELECT @FileName=SUBSTRING(@FileName,CHARINDEX('-',@FileName)+2,LEN(@FileName)-CHARINDEX('-',@FileName))
      SELECT LEFT(@FileName,CHARINDEX(' ',@FileName)-1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-23
        相关资源
        最近更新 更多