【问题标题】:Using Charindex with in Substring is resulting in error在 Substring 中使用 Charindex 会导致错误
【发布时间】:2015-06-08 12:54:10
【问题描述】:

我在 SUBSTRING 中有 CHARINDEX 函数,它必须识别分隔符 (|) 值并将该值作为参数返回给子字符串

当分隔符出现时,它可以正常工作

select SUBSTRING('SH1684|32I5', 1, CHARINDEX('|', 'SH1684|32I5') -1) AS ID

其中 ID 为 SH1684

当它不存在时

这会导致错误

Msg 536, Level 16, State 1, Line 1 传递给的长度参数无效 子字符串函数。

但我的目的是在 ID 中获得价值为 SH168432I5。

我该如何规避这个问题。

【问题讨论】:

    标签: sql-server substring charindex


    【解决方案1】:

    试试这个,通过添加分隔符,您可以确保它在丢失的情况下处于正确的逻辑位置:

    SELECT LEFT('SH1684|32I5', CHARINDEX('|', 'SH1684|32I5' + '|') - 1)
    

    【讨论】:

      【解决方案2】:

      只需使用CASE 语句来确定| 是否存在。 CHARINDEX 将返回 0 如果它不存在:

      DECLARE @val VARCHAR(15) = 'SH1684|32I5'
      
      -- show the value
      SELECT @val
      
      -- returns the section before the pipe
      SELECT  CASE WHEN CHARINDEX('|', @val) > 0
                   THEN SUBSTRING('SH1684|32I5', 1,
                                  CHARINDEX('|', 'SH1684|32I5') - 1)
                   ELSE @val
              END AS ID
      
      -- set value without pipe
      SET @val = 'SH168432I5'
      -- same query returns entire value as there is no pipe
      SELECT  CASE WHEN CHARINDEX('|', @val) > 0
                   THEN SUBSTRING('SH1684|32I5', 1,
                                  CHARINDEX('|', 'SH1684|32I5') - 1)
                   ELSE @val
              END AS ID
      

      所以它会返回|之前的部分,如果它存在的话,否则它会返回整个值。

      【讨论】:

        【解决方案3】:

        请使用 select REPLACE('SH1684|32I5', '|', '') 。这必须有效。 Replace Function Example

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-11-15
          • 2012-02-24
          • 2013-05-29
          • 2023-03-10
          • 2023-04-02
          • 2014-06-06
          • 1970-01-01
          相关资源
          最近更新 更多