当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;
答案 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