这个问题差不多想了2天,看起来很简单,确实想了蛮久,查了很多资料都是写函数的,因为自己懒,SQL脚本不想写,别人的函数也不想看,就发呆了好长时间……
……废话不多说,直接上语句……
问题:siji这个字段存储的是text, 需要根据siji字段的ID值,到字典去查询对应的名字,然后siji再返回 “李明,张三”
解决思路:
(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
结果: