在SQL中连接两个列值
我有两个专栏:在SQL中连接两个列值,sql,sql-server,string,Sql,Sql Server,String,我有两个专栏: colA colB a1 b1 NULL b2 a3 NULL 对于以下情况,我希望在SELECT查询中连接两列: 如果colA的值为NULL且colB为NULL返回NULL 如果colA的值为空且colB不为空返回:b1 如果colA的值不为NULL且colB为NULL返回a1 如果两个值都不为空返回a1:b1 如何为案例选择合适的值 SELECT NULLIF(COALESCE(colA,'')+COALESCE(':'+colB,''),
colA colB
a1 b1
NULL b2
a3 NULL
对于以下情况,我希望在SELECT查询中连接两列:
如果colA的值为NULL
且colB为NULL
返回NULL
如果
colA的值为空
且colB不为空
返回:b1
如果
colA的值不为NULL
且colB为NULL
返回a1
如果
两个值都不为空
返回a1:b1
如何为案例选择合适的值
SELECT NULLIF(COALESCE(colA,'')+COALESCE(':'+colB,''), '') FROM myTable
一些解释:
COALESCE
返回其参数列表中的第一个非空参数。因此,第一个COALESCE
将nullcolA
转换为空字符串
第二个COALESCE
首先在colB
前面加一个冒号,但是如果colB
为null,尝试附加字符串将返回null!因此,如果colB
为null,则结果再次为空字符串,如果不是null,则为冒号加上colB
我们附加两个合并输出。我们现在拥有OP想要的所有内容,除了如果两者都为null,那么我们就拥有空字符串NULL如果
处理这个问题——如果其参数相等,则返回NULL,否则返回第一个参数 这应该可以做到:
DECLARE @t TABLE (cola VARCHAR(100), colb VARCHAR(100));
INSERT INTO @t VALUES
(NULL, NULL),
('a1', NULL),
(NULL, 'b1'),
('a1', 'b1');
SELECT NULLIF(CONCAT(cola, ':' + colb), '')
FROM @t
NULL
a1
:b1
a1:b1
请记住:
+
运算符在任何操作数为NULL时生成NULL
CONCAT
将空值视为空字符串
NULLIF
是否有处理特殊情况的方法
请向我们展示您目前的代码。哎呀。。。感谢@MatBallieNice solution…我总是忘记CONCAT
,而不是硬编码列名称中提到的值。。。做得好
;WITH col_data
As
(SELECT cols = CASE WHEN colA IS NOT NULL THEN colA ELSE '' END
+ CASE WHEN colB IS NOT NULL THEN ': '+colB ELSE '' END
FROM CTE
)
SELECT ISNULL(cols, '') from col_data;