查询某个表某个字段。
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
来源:oschina
链接:https://my.oschina.net/oisanblog/blog/4715044