【问题标题】:Select part of a string between two values SQL 2008在两个值之间选择字符串的一部分 SQL 2008
【发布时间】:2015-01-30 11:05:44
【问题描述】:

我正在尝试在 2 个值之间选择一个字符串的一部分,我设法让它工作到大约 90%,但随后出现错误 -

SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText)))

它查询的字段是这样的

开始日期:01/02/2013 50 x 156.00/MX + 207.64

想要的结果是

156.00

现在我认为问题在于有时 X 可以在它之前或之后有一个空格,或者根本没有空格。它在抛出之前通过了大约 114,000 行

传递给 LEFT 或 SUBSTRING 函数的长度参数无效。

但我正在努力解决。

【问题讨论】:

    标签: sql-server-2008 substring charindex


    【解决方案1】:

    主要原因可能是因为LEN(@QRY) - CHARINDEX('x', @QRY)-CHARINDEX('/', REVERSE(@QRY)) 小于零,即负值。这反过来会在SUBSTRING 中引发错误,因为 SUBSTRING 的最小索引为零。因此,我们在 case 语句中检查该条件。

    SELECT CASE WHEN LEN(TranText) - CHARINDEX('x',TranText)-CHARINDEX('/', REVERSE(TranText)) >= 0 THEN
    SUBSTRING(TranText, CHARINDEX('x', TranText) + 1, LEN(TranText) - CHARINDEX('x', TranText) - CHARINDEX('/', REVERSE(TranText)))
    ELSE NULL END
    FROM YOURTABLE
    

    【讨论】:

      【解决方案2】:

      试试这个。使用REPLACE函数,然后解析。

      DECLARE @string AS VARCHAR(100),  @result AS VARCHAR(100)
      DECLARE @nStart AS int
      
      SET @string = 'Start Date : 01/02/2013 50 x 156.00/MX + 207.64'
      SET @result = REPLACE(@string, '/', '')
      SET @nStart = CHARINDEX('x', @result) + 1
      SET @result = SUBSTRING(@result, @nStart, CHARINDEX('M',@result) - @nStart)
      
      SELECT @result
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-24
        • 2017-12-27
        • 1970-01-01
        • 2013-08-24
        • 1970-01-01
        • 2021-10-30
        • 1970-01-01
        • 2013-12-31
        相关资源
        最近更新 更多