这是我的数据
col1 col2 col col3 col4 col5 col6
42 A 11 18 89 16 empty
42 B 12 empty 89 14 C
36 8 9 empty empty 2 empty
这是我正在运行的脚本
select col1 + COALESCE ([col2]+'-','')
+COALESCE([col3]+'-','')+COALESCE([col4]+'-','')
+COALESCE([col5]+'-','')+COALESCE([col6],'') as totalCol
FROM ...
这就是我得到的
totalCol
42A-11-18-89-16-
42B-12- -89-14-C
368-9- - -2 -
这就是我想要的
totalCol
42A-11-18-89-16
42B-12-89-14-C
368-9-2
答案 0 :(得分:1)
在脚本
之后运行“ - ”替换为“”你还必须记住空值和空格是两回事。
更新了脚本
select ltrim(rtrim(replace(replace(
col1 + COALESCE ([col2]+'-','')
+COALESCE([col3]+'-','')+COALESCE([col4]+'-','')
+COALESCE([col5]+'-','')+COALESCE([col6],'') + ' ','--','-'),
'- ','')))
as totalCol
FROM ...
或假设只有空格而不是空格
select ltrim(rtrim(replace(
[col1] + [col2]+'-' + [col3]+'-' + [col4]+'-' + [col5]+'-' + [col6] + ' '
'- ','')))
as totalCol
FROM ...
答案 1 :(得分:0)
假设您已经设计了数据来说明问题(因为您的数据中有col
,但在查询中没有使用col
),您可以轻松地这样做。在所有非空数据之后添加破折号(-
)。然后,我们拉除了最后一个字符(因为它总是短划线)。
我还添加了更多代码来创建数据,这样您就可以复制/运行整个查询并查看它是否有效。
declare @tbl table (
col1 varchar(10) null,
col2 varchar(10) null,
col3 varchar(10) null,
col4 varchar(10) null,
col5 varchar(10) null,
col6 varchar(10) null,
col7 varchar(10) null
)
insert into @tbl values
('42', 'A', '11', '18', '89', '16', null),
('42', 'B', '12', null, '89', '14', 'C'),
('36', '8', '9', null, null, '2', null)
select left(x.concat_val, len(x.concat_val) - 1) as totalCol
from (
select isnull(col1 + '-', '') +
isnull(col2 + '-', '') +
isnull(col3 + '-', '') +
isnull(col4 + '-', '') +
isnull(col5 + '-', '') +
isnull(col6 + '-', '') +
isnull(col7 + '-', '') as concat_val
from @tbl
) as x
这里是返回的数据:
totalCol
-----------------------------------------------------------------------------
42-A-11-18-89-16
42-B-12-89-14-C
36-8-9-2