从sql coalesce字符串中删除空列表元素

时间:2013-09-10 08:41:40

标签: sql-server sql-server-2005

我有一个具有此语法的查询

coalesce(cast([tb_groups].[f_member_id_creator] as varchar) + ',', '') + coalesce(cast([tb_groups].[f_member_id_officer1] as varchar) + ',','') + coalesce(cast([tb_groups].[f_member_id_officer2] as varchar) + ',', '') + coalesce(cast([tb_groups].[f_member_id_officer3] as varchar) + ',','') + coalesce(cast([tb_groups].[f_member_id_officer4] as varchar) + ',', '') + coalesce(cast([tb_groups].[f_member_id_officer5] as varchar),'') as admin_list

F_member_id_creator始终存在于db中,但f_member_id_officer1到5可以任意组合使用。

例如,上述语句的返回值可能是

“25431,32663 ,,,,” 或“25431,,32663 ,,,” 或“25431 ,,, 32663 ,,” 或“25431 ,,,, 32663,”

我需要做的是告诉SQL删除空列表元素并返回“25431,32663”

在SQL Server 2005中以任何方式执行此操作?

或者更好的是,如果它的null或空白,它是否根本没有选择空序号?

2 个答案:

答案 0 :(得分:0)

你得到的结果是[tb_groups].[f_member_id_creator],也许是空的而不是null。试试这个:

coalesce(NULLIF(LTRIM(RTRIM(cast([tb_groups].[f_member_id_creator] as varchar))), '') + ',', '') + ...

如果您同意没有尾随和/或前导空格,则可以省略LTRIM / RTRIM。

答案 1 :(得分:0)

我稍微修改了上面的代码......我认为它有效......因为它对我有用

COALESCE(CAST([tb_groups].[f_member_id_creator] as varchar), '') + 
COALESCE(NULLIF(',' + CAST([tb_groups].[f_member_id_officer1] as varchar),','), '') + 
COALESCE(NULLIF(',' + CAST([tb_groups].[f_member_id_officer2] as varchar),','), '') + 
COALESCE(NULLIF(',' + CAST([tb_groups].[f_member_id_officer3] as varchar),','), '') + 
COALESCE(NULLIF(',' + CAST([tb_groups].[f_member_id_officer4] as varchar),','), '') + 
COALESCE(NULLIF(',' + CAST([tb_groups].[f_member_id_officer5] as varchar),','), '') as admin_list
相关问题