我有一個連接人的名字和姓氏的 SQL 陳述句。我使用以下 SQL 陳述句。
ISNULL(FullName.FirstName, '') ' ' ISNULL(FullName.LastName, '')
我需要的是更改它以添加FirstName并且LastName僅當它們不是兩者時NULL。如果其中之一不為 NULL,則使用該值。
例子:
- FirstName 和 LastName 為 NULL -> NULL
- FirstName 是 John,LastName 是 NULL -> John
- FirstName 為 NULL,LastName 為 Doe -> Doe
-> 表示結果
uj5u.com熱心網友回復:
- 使用 CONCAT() 連接沒有任何 NULL 問題
- TRIM() 洗掉一個或兩個欄位丟失時的任何空格
- 如果名字和姓氏都丟失,NULLIF() 用 NULL 替換 ''
SQL Server 2017 解決方案
DROP TABLE IF EXISTS #emp
CREATE TABLE #emp (ID INT IDENTITY(1,1), FirstName VARCHAR(25), LastName VARCHAR(25));
INSERT INTO #emp
VALUES(null,null)
,('John',null)
,('Doe',null)
,('John', 'Doe');
SELECT FullName = NULLIF(TRIM(CONCAT(FirstName,' ',LastName)),'')
,*
FROM #emp
uj5u.com熱心網友回復:
實際上,如果您只是將當前運算式包裝在TRIM()其中,它應該會給您想要的行為:
SELECT TRIM(ISNULL(FullName.FirstName, '') ' '
ISNULL(FullName.LastName, '')) AS FullName
FROM yourTable;
如果僅存在名字或姓氏,您的原始運算式將留下一個懸空的前導/尾隨空格。呼叫TRIM()通過洗掉這個額外的空間來解決這個問題。
uj5u.com熱心網友回復:
您可以使用簡單的 case 陳述句來解決這個問題:
create table emp (emp_id int4, fname varchar(10), lname varchar(10));
insert into emp (emp_id) values(1);
insert into emp (emp_id,fname) values(2, 'John');
insert into emp (emp_id,lname) values(3, 'Doe');
insert into emp (emp_id,fname,lname) values(4, 'John', 'Doe');
select emp_id,fname, lname,
case
WHEN FNAME is not null and LNAME is not null then
FNAME||' '||LNAME
WHEN FNAME is not null and LNAME is NULL then
FNAME
WHEN FNAME is null and LNAME is not NULL then
LNAME
else null
end as FULL_NAME
from emp;

uj5u.com熱心網友回復:
更好的 SQL Server 2017 解決方案:
使用新CONCAT_WS函式,它與分隔符連接,忽略空值
CREATE TABLE #emp (ID INT IDENTITY(1,1), FirstName VARCHAR(25), LastName VARCHAR(25));
INSERT INTO #emp
VALUES(null,null)
,('John',null)
,('Doe',null)
,('John', 'Doe');
SELECT FullName = CONCAT_WS(' ', FirstName, LastName)
,*
FROM #emp;
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/425853.html
上一篇:加入基于樹的表
