仅在SQL Server中不为null的情况下如何串联?

问题描述

我有这张桌子:

PersonTable

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

我想从表中选择ID和名称,并在ID上使用concat,但前提是它不为null,例如:

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

我尝试了以下操作:

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

但是我的查询返回以下内容:

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

解决方法

嗯。您可以使用+代替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;
,

您可以尝试使用以下代码来获得所需的解决方案:

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

这是示例屏幕截图:

enter image description here

,

您可以简单地使用NULLIF()如下:

SELECT NULLIF(CONCAT('A',Id),'A') Id,Name
FROM
(
  VALUES
  (10,'Mike'),(NULL,'Jane')
) T(Id,Name);

OR

SELECT TT.Value Id,T.Name
FROM
(
  VALUES
  (10,Name) CROSS APPLY(VALUES (NULLIF(CONCAT('A','A'))) TT(Value);

如果CONCAT()列为'A',则函数Id将返回NULL,因此您只需要使用{{1 }}函数,如果串联的字符串= A,它将返回'A'

如果要这样做,也可以使用NULLIF()表达式:

NULL

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...