问题描述
我有这张桌子:
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
,如果任何参数为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);
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