查找表中的某个字段,如果有‘-’,则取‘-’之前的值,没有‘-’,则取原值

问题遇到的现象和发生背景

表中gcbh字段,例如值为:XDK1243和XDK123-dkfk,如果有‘-’,则取‘-’之前的值XDK123,没有‘-’,则取原值XDK1243

问题相关代码,请勿粘贴截图

select left(gcbh,case when charindex('-',gcbh)-1>0 then charindex('-',gcbh)-1
when charindex('-',gcbh)-1<=0 then gcbh end)bh from uf_gcxxb

运行结果及报错内容

在将varchar值转换成数据类型int时失败

求解(表中有多个字段,不能直接取字符串)

img

其中的字符串可以换成你的字段名


select SUBSTRING('XDK123-dkfk',1,case when (CHARINDEX('-','XDK123-dkfk')-1)>0 then (CHARINDEX('-','XDK123-dkfk')-1) else (LEN('XDK123-dkfk')) end) 
select SUBSTRING('XDK123',1,case when (CHARINDEX('-','XDK123')-1)>0 then (CHARINDEX('-','XDK123')-1) else (LEN('XDK123')) end) 

select
case
when charindex('-',a.name)>0 then SUBSTRING(a.name,0,charindex('-',a.name))
else
'XDK1243'
end
from a