SQL server 采用 subtring、charindex 分隔逗号查字典,拼接查询结果思路及例子

这个问题差不多想了2天,看起来很简单,确实想了蛮久,查了很多资料都是写函数的,因为自己懒,SQL脚本不想写,别人的函数也不想看,就发呆了好长时间……

……废话不多说,直接上语句……

 

问题:siji这个字段存储的是text, 需要根据siji字段的ID值,到字典去查询对应的名字,然后siji再返回 “李明,张三”

SQL server 采用 subtring、charindex 分隔逗号查字典,拼接查询结果思路及例子_第1张图片      

解决思路:

(1)text转换成字符串:(convert(varchar(50),字段名) 

(2)charindex查找siji 字段【,】逗号的位置:charindex(',',(convert(varchar(50),字段名))),返回逗号的位置

(3)substring截取字段:substring(字段名,开始位置,结束位置)

(4)len获取字段长度:len(字段名)

(5)substring根据逗号【,】拆分字符串:

          ①逗号前半部分:substring(字段名,1,逗号前一位)

             SQL写法:substring( 字段名, 1,( charindex(',',字段名)  )-1 )

          ②逗号后半部分:substring(字段名,逗号后一位,字段总长度)

              SQL写法:substring( 字段名, ( charindex(',',字段名)  )+1, len(字段名)) 

拆分字符串后的结果:

(6)根据拆分出来的ID去查找对应的字段,返回名字

(7)返回的名字再进行字符串拼接:A+","+B 

(8)顺便提一下

         case when  XXX  then  AAAAAA   else BBBBBBB  end   (注意不要漏掉end)

    这个语句特别适用于字段中出现两种情况的写法,最近发现 like 也可以写在 case when 语句中,很是方便.

 

实际应用中的SQL代码:

select 
(
case when formtable.a6 like '%,%' 
then 
(
(
select  lastname from hrmresource where hrmresource.id=
(substring((convert(varchar(50),formtable.a6)),1,charindex(',',(convert(varchar(50),formtable.a6)))-1) )
)
+','+

(
select  lastname from hrmresource where hrmresource.id=
(substring((convert(varchar(50),formtable.a6)),charindex(',',(convert(varchar(50),formtable.a6)))+1,len(convert(varchar(50),formtable.a6))) )
)
)

else ( select lastname from hrmresource where hrmresource.id=convert(int,convert(varchar(50),formtable.a6)) )end
) as 名字,

from 
formtable

结果:

SQL server 采用 subtring、charindex 分隔逗号查字典,拼接查询结果思路及例子_第2张图片

你可能感兴趣的:(SQL,sql,server,charindex,convert,substring,len,case,when)