(|)值和参数返回值的字符串我在SUBSTRING具有识别符CHARINDEX函数
当分隔符是目前它工作正常
select SUBSTRING('SH1684|32I5', 1, CHARINDEX('|', 'SH1684|32I5') -1) AS ID
其中ID是SH1684
当它不存在
这将导致错误的
消息536,级别16,状态1,行传递给子功能1个无效长度参数。
但我的意图是在ID获得价值SH168432I5。
我怎样才能解决这个问题。
(|)值和参数返回值的字符串我在SUBSTRING具有识别符CHARINDEX函数
当分隔符是目前它工作正常
select SUBSTRING('SH1684|32I5', 1, CHARINDEX('|', 'SH1684|32I5') -1) AS ID
其中ID是SH1684
当它不存在
这将导致错误的
消息536,级别16,状态1,行传递给子功能1个无效长度参数。
但我的意图是在ID获得价值SH168432I5。
我怎样才能解决这个问题。
试试这个,通过添加分隔符,你可以确保它是在它缺少的情况下正确的逻辑位置:
SELECT LEFT('SH1684|32I5', CHARINDEX('|', 'SH1684|32I5' + '|') - 1)
只需使用一个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
因此,将前归还部分|
如果它存在,否则将返回整个值。
请使用SELECT REPLACE( 'SH1684 | 32I5', '|', '')。 这必须工作。 替换实施例功能