连接NULL返回T-SQL中的值(CONCAT函数)

时间:2017-09-19 21:32:34

标签: tsql concat string-concatenation

当col1包含空值时,为什么会返回.

CONCAT(NULLIF([COL1],''),'.')

我有3列需要与之间的.连接,有时列包含空值。在这种情况下,不应将尾随.连接起来。我使用什么功能?

col1 col2 col3 
A     1    x
B     2    

预期结果:

A.1.X
B.2

测试代码:

DECLARE @tbl TABLE(a varchar(100),b varchar(100),c varchar(100))
INSERT INTO @tbl
SELECT 'A','1','X' UNION
SELECT 'B','2','' UNION
SELECT 'C','','' UNION
SELECT '','1','X' UNION
SELECT 'B','','' UNION
SELECT 'C','',''

SELECT CONCAT ( Nullif(a,''),'.' + nullif(b,''), '.' + nullif(c,'')) AS Contact_Result FROM @tbl;

3 个答案:

答案 0 :(得分:1)

您可以这样使用SQL CONCAT

SELECT CONCAT ( a,IIF((NULLIF(a,'')+NULLIF(b,'')) IS NULL,'','.'),b,IIF((NULLIF(b,'')+NULLIF(c,'')) IS NULL,'','.'), c) AS Contact_Result FROM @tbl;  

以下测试代码

DECLARE @tbl TABLE(a varchar(100),b varchar(100),c varchar(100))
INSERT INTO @tbl
SELECT 'A','1','X' UNION
SELECT 'B','2',NULL UNION
SELECT 'C',NULL,NULL


SELECT CONCAT ( a,IIF((NULLIF(a,'')+NULLIF(b,'')) IS NULL,'','.'),b,IIF((NULLIF(b,'')+NULLIF(c,'')) IS NULL,'','.'), c) AS Contact_Result FROM @tbl;  

Contact_Result

A.1.X 
B.2 
C 

此类联接的另一个常见用途是 Concat a Full Name 在这种情况下。 (点)被替换为' ' (空间),它使事情变得更容易,因为你可以使用 trim

DECLARE @tbl TABLE(a varchar(100),b varchar(100),c varchar(100))
INSERT INTO @tbl
SELECT 'FirtName','MiddleName','LastName' UNION
SELECT 'FistName','','LastName' UNION
SELECT '','','FullName'


SELECT LTRIM(CONCAT ( a,' ' + b,' ' + c)) AS Contact_Result FROM @tbl;  

结果

FullName
FirtName MiddleName LastName
FistName  LastName

答案 1 :(得分:0)

你必须上学。我在手机上无法测试。

<击>     ISNULL(NULLIF([COL1],&#39;&#39;)+&#39;。&#39;,&#39;&#39;)+     ISNULL(NULLIF([COL2],&#39;&#39;)+&#39;。&#39;,&#39;&#39;)+     ISNULL(NULLIF([COL3],&#39;&#39;),&#39;&#39;);

----------------编辑----------------

好吧,这在我的手机上并不像我想的那么容易。这是我使用SQL Server 2005 +

的更新解决方案
cv        col1  col2  col3  concatinatedValue
--------- ----- ----- ----- -------------------
a.b.c     a     b     c     a.b.c
aa.bb     aa    bb          aa.bb
x.z       x           z     x.z
.p.pp           p     pp    p.pp
!!!       !!!               !!!
.fff                  fff   fff
<----------- blank line -----------> 

<强>返回

{{1}}

答案 2 :(得分:0)

这是一个涵盖所有可能性的答案

SELECT SUBSTRING(CONCAT ('.' + NULLIF(a,''),'.' + NULLIF(b,''),'.' + NULLIF(c,'')),2,10000) AS Contact_Result FROM @tbl;  

完成测试用例

DECLARE @tbl TABLE(a varchar(100),b varchar(100),c varchar(100))
INSERT INTO @tbl
SELECT 'a','','' UNION
SELECT 'a','b','' UNION
SELECT 'a','b','c' UNION
SELECT 'a','','c' UNION
SELECT '','b','c' UNION
SELECT '','b','' UNION
SELECT '','','c' UNION
SELECT '','','' 


SELECT SUBSTRING(CONCAT ('.' + NULLIF(a,''),'.' + NULLIF(b,''),'.' + NULLIF(c,'')),2,10000) AS Contact_Result FROM @tbl;  

<强>结果

c
b
b.c
a
a.c
a.b
a.b.c