如何仅在 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 如果任何参数是 NULLconcat() 忽略 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);