如何仅在 SQL 服务器中不为空时才连接?
How do I concatenate only if not null in SQL Server?
我有这个 table:
人物表
| id | name |
---------------
| 10 | Mike |
| NULL | Jane |
我想 select 来自 table 的 id 和 name 并在 id 上使用 concat,但前提是它不为 null,如下所示:
+------+------+
| Id | Name |
+------+------+
| A10 | Mike |
| NULL | Jane |
+------+------+
我试过以下方法:
SELECT ISNULL(concat('A', id), NULL) AS id, name FROM PeronTable
但是我的查询 returns 这个:
+-----+------+
| Id | Name |
+-----+------+
| A10 | Mike |
| A | Jane |
+-----+------+
嗯。您可以使用 +
而不是 concat()
:
select 'A' + convert(varchar(255), id), name
from t;
假设 id
是数字而不是字符串,convert()
(或 cast()
)是必要的。
+
returns NULL
如果任何参数是 NULL
; concat()
忽略 NULL
个参数。
当然,您可以将 concat()
与 case
表达式一起使用:
select (case when id is not null then concat('A', id) end), name
from t;
您可以像下面的代码一样尝试以获得您期望的解决方案:
Select 'A' + convert(varchar(255), id) AS id, name
from PeronTable;
这是一个示例屏幕截图:
您可以简单地使用 NULLIF()
如下:
SELECT NULLIF(CONCAT('A', Id), 'A') Id,
Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name);
或
SELECT TT.Value Id,
T.Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name) CROSS APPLY(VALUES (NULLIF(CONCAT('A', Id), 'A'))) TT(Value);
如果 Id
列是 NULL
,函数 CONCAT()
将 returns 'A'
,因此您只需要检查它是否 returns 'A'
使用 NULLIF()
函数,如果连接的字符串 = A.
,它将 returns NULL
您也可以使用 CASE
表达式,如果您要作为:
SELECT CASE WHEN TT.Value <> 'A' THEN Value END Id,
T.Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name) CROSS APPLY(VALUES (CONCAT('A', Id))) TT(Value);
我有这个 table:
人物表
| id | name |
---------------
| 10 | Mike |
| NULL | Jane |
我想 select 来自 table 的 id 和 name 并在 id 上使用 concat,但前提是它不为 null,如下所示:
+------+------+
| Id | Name |
+------+------+
| A10 | Mike |
| NULL | Jane |
+------+------+
我试过以下方法:
SELECT ISNULL(concat('A', id), NULL) AS id, name FROM PeronTable
但是我的查询 returns 这个:
+-----+------+
| Id | Name |
+-----+------+
| A10 | Mike |
| A | Jane |
+-----+------+
嗯。您可以使用 +
而不是 concat()
:
select 'A' + convert(varchar(255), id), name
from t;
假设 id
是数字而不是字符串,convert()
(或 cast()
)是必要的。
+
returns NULL
如果任何参数是 NULL
; concat()
忽略 NULL
个参数。
当然,您可以将 concat()
与 case
表达式一起使用:
select (case when id is not null then concat('A', id) end), name
from t;
您可以像下面的代码一样尝试以获得您期望的解决方案:
Select 'A' + convert(varchar(255), id) AS id, name
from PeronTable;
这是一个示例屏幕截图:
您可以简单地使用 NULLIF()
如下:
SELECT NULLIF(CONCAT('A', Id), 'A') Id,
Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name);
或
SELECT TT.Value Id,
T.Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name) CROSS APPLY(VALUES (NULLIF(CONCAT('A', Id), 'A'))) TT(Value);
如果 Id
列是 NULL
,函数 CONCAT()
将 returns 'A'
,因此您只需要检查它是否 returns 'A'
使用 NULLIF()
函数,如果连接的字符串 = A.
NULL
您也可以使用 CASE
表达式,如果您要作为:
SELECT CASE WHEN TT.Value <> 'A' THEN Value END Id,
T.Name
FROM
(
VALUES
(10, 'Mike'),
(NULL, 'Jane')
) T(Id, Name) CROSS APPLY(VALUES (CONCAT('A', Id))) TT(Value);