0

我有这张桌子:

人表

|  id  | name |
---------------
|  10  | Mike |
| NULL | Jane |

我想从表中选择 id 和 name 并在 id 上使用 concat,但前提是它不为空,如下所示:

+------+------+
|  Id  | Name |
+------+------+
| A10  | Mike |
| NULL | Jane |
+------+------+

我尝试了以下方法:

SELECT ISNULL(concat('A', id), NULL) AS id, name FROM PeronTable

但我的查询返回这个:

+-----+------+
| Id  | Name |
+-----+------+
| A10 | Mike |
| A   | Jane |
+-----+------+
4

3 回答 3

3

嗯。您可以使用+代替concat()

select 'A' + convert(varchar(255), id), name
from t;

convert()(或cast())是必要的,假设它id是一个数字而不是一个字符串。

+NULL如果任何参数是,则返回NULLconcat()忽略NULL论点。

当然,您可以使用concat()表达式case

select (case when id is not null then concat('A', id) end), name
from t;
于 2020-09-09T11:01:52.910 回答
1

您可以尝试像下面的代码来获得您预期的解决方案:

Select 'A' + convert(varchar(255), id) AS id, name
from PeronTable;

这是一个示例屏幕截图:

在此处输入图像描述

于 2020-09-09T11:08:59.520 回答
1

您可以简单地使用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);

如果列是,该函数CONCAT()将返回,因此您只需使用函数检查它是否返回,如果连接的字符串 = A,该函数将返回。'A'IdNULL'A'NULLIF()NULL

你也可以使用CASE表达式 if you to as:

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);
于 2020-09-09T11:39:06.157 回答