使用CHARINDEX与子串导致错误(Using Charindex with in Substri

2019-10-23 07:25发布

(|)值和参数返回值的字符串我在SUBSTRING具有识别符CHARINDEX函数

当分隔符是目前它工作正常

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

其中ID是SH1684

当它不存在

这将导致错误的

消息536,级别16,状态1,行传递给子功能1个无效长度参数。

但我的意图是在ID获得价值SH168432I5。

我怎样才能解决这个问题。

Answer 1:

试试这个,通过添加分隔符,你可以确保它是在它缺少的情况下正确的逻辑位置:

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


Answer 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

因此,将前归还部分| 如果它存在,否则将返回整个值。



Answer 3:

请使用SELECT REPLACE( 'SH1684 | 32I5', '|', '')。 这必须工作。 替换实施例功能



文章来源: Using Charindex with in Substring is resulting in error