我有一个具有此语法的查询
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或空白,它是否根本没有选择空序号?
答案 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