sql截取字符串

戏子无情 提交于 2020-11-13 01:15:58

查询某个表某个字段。

select   hao  from workflow where fno in('SQ2010310069','SQ2011120116')

得到结果

hao

H060502N-1PGQ
FA04-2783-17

现在有个要求:就是只取这两个结果第一个符号‘-’后内容的后面三位,

即是PGQ和783。

 

一、思考:先判断‘-’后面还有没有‘-’。如果有就先取前第二个‘-’前面的内容,再取后三位,如果没有直接取后三位。

select  hao ,

---判断有没有第二个‘-’,CHARINDEX('-',hao)找到第一个‘-’位置,CHARINDEX('-',hao ,CHARINDEX('-',hao)+1)从第一个‘-’后一位开始再找’-‘出现位置。
case when  CHARINDEX('-',hao ,CHARINDEX('-',hao)+1)>0

---有第二个‘-’。LEFT(hao ,CHARINDEX('-',hao ,CHARINDEX('-',hao )+1)-1)取到第二个‘-’左边的所有内容。
then right(LEFT(hao ,CHARINDEX('-',hao ,CHARINDEX('-',hao )+1)-1),3)  
else  right(hao ,3)
end as 'pianhao'
from workflow where fno in('SQ2010310069','SQ2011120116')

结果:

hao                          pianhao

H060502N-1PGQ    PGQ
FA04-2783-17         783

 

二、思考:先判断‘-’后面还有没有‘-’。如果有就截取两个‘-’之间的内容,再取后三位,如果没有直接取后三位。

select  hao ,

---判断有没有第二个‘-’,CHARINDEX('-',hao)找到第一个‘-’位置,CHARINDEX('-',hao ,CHARINDEX('-',hao)+1)从第一个‘-’后一位开始再找’-‘出现位置。
case when  CHARINDEX('-',hao ,CHARINDEX('-',hao)+1)>0

---有第二个‘-’。CHARINDEX('-',hao,CHARINDEX('-',hao)+1)找到第二个‘-’在第几位

---substring( hao,CHARINDEX('-',hao),CHARINDEX('-',hao,CHARINDEX('-',hao)+1)-CHARINDEX('-',hao) )截取第一个‘-’到第二个‘-’间的内容。
then right(substring( hao,CHARINDEX('-',hao),CHARINDEX('-',hao,CHARINDEX('-',hao)+1)-CHARINDEX('-',hao) ),3)
else  right(hao ,3)
end as 'pianhao'
from workflow where fno in('SQ2010310069','SQ2011120116')

结果是一样的。

hao                          pianhao

H060502N-1PGQ    PGQ
FA04-2783-17         783

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!