DECLARE @mockup TABLE(Column1 VARCHAR(1),Column2 VARCHAR(1));
INSERT INTO @mockup VALUES('1','2'),('-','2'),('1','2'),('-','-'),('2','-'),('1','2');
SELECT ISNULL(NULLIF(Column1 + '|','-|'),'')
+ISNULL(NULLIF(Column2,'-'),'')
FROM @mockup
以上查询结果如下,
1|2
2
1|2
2|
1|2
我想要的结果如上所述除了row4,其中2 |应该只是2。 '|'不应该在值之前或之后存在。
答案 0 :(得分:0)
使用Replace
功能
SELECT replace(replace(replace(Column1 + '|' + Column2,'-|',''),'|-',''),'-','')
FROM @mockup
或尝试使用CASE
声明
SELECT CASE
WHEN column1 LIKE '[0-9]' AND column2 LIKE '[0-9]' THEN column1 + '|' + column1
WHEN column1 LIKE '[0-9]' AND column2 NOT LIKE '[0-9]' THEN column1
ELSE column2
END
FROM @mockup
如果您想检查-
而不是数字,那么
SELECT CASE
WHEN column1 NOT LIKE '-' AND column2 NOT LIKE '-' THEN column1 + '|' + column1
WHEN column1 NOT LIKE '-' AND column2 LIKE '-' THEN column1
ELSE column2
END
FROM @mockup
答案 1 :(得分:0)
只需加入这两个字段,然后使用REPLACE
删除|-
和-|
。 WHERE
子句中的条件可以避免两个字段都为-
的记录:
select replace(replace(Column1+'|'+Column2,'-|',''),'|-','') as Result
from mockup
where coalesce(nullif(Column1,'-'),nullif(Column2,'-')) is not null
输出:
Result
1|2
2
1|2
2
1|2
查看结果here。
答案 2 :(得分:0)
我会这样做:
select stuff( ((case when column1 not like '-' then '|' + column1 else '' end) +
(case when column2 not like '-' then '|' + column2 else '' end)
), 1, 1, '');
这是我发现在SQL Server中实现concat_ws()
的最简单方法。 concat_ws()
是其他数据库中可用的功能,您可以这样做:
select concat_ws('|',
(case when column1 not like '-' then column1 end),
(case when column2 not like '-' then column2 end)
)