CM2*_*M2K 4 sql t-sql sql-server sql-server-2012
我有以下练习:
将名字,中间名,姓氏和名字后缀连接起来,以以下格式形成客户的名字:FirstName [MiddleName。] LastName [,Suffix]。请注意,应省略NULL值。
我将其解释为以下情况(从图像创建表并插入一些值):
请在下面找到我的示例数据,名称为#TB_Customer
CustomerName
列是预期的结果,应采用以下格式
FirstName MiddleName.LastName, Suffix 如果我有所有领域的肠子。MiddleName和Suffix可以是可选的,因此情况为:
如果有一个suffix而不是一个,MiddleName那么CustomerName
应该是形式Firstname LastName,Suffix
如果有一个MiddleName而不是一个,suffix那么CustomerName
应该是形式FirstName MiddleName.LastName
如果MiddleName和Suffix均为null,CustomerName则应采用以下形式FirstName LastName)
但是正如您所看到的,我编写的CustomerName案例查询无法按预期方式工作(请参阅cases上面的项目符号)
我为获取该CustomerName列而编写的查询是:
SELECT
(case
when (MiddleName is not null and Suffix is not null) then
CONCAT(c.FIRSTNAME,' ', c.MiddleName,'.', c.LASTNAME, ', ',Suffix)
when (MiddleName is null and suffix is null) then
CONCAT(c.FIRSTNAME,' ' ,c.LASTNAME)
when (MiddleName is null and Suffix is not null )then
concat (c.FirstName, ' ', c.LastName, ', ',Suffix )
when (Suffix is null and MiddleName is not null) then
concat (c.FirstName, ' ',MiddleName,'.',LastName)
end
)AS CustomerName
,c.*
FROM #TB_Customer c;
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
使用SQL Server 2012
编辑
要重新创建我的场景,请参见下面的代码(抱歉,未链接小提琴,但网站在我当前的位置没有响应)
CREATE TABLE #TB_Customer
(
CustomerID int , --PK
Title varchar(50),
FirstName varchar(50),
MiddleName varchar(50),
LastName varchar(50),
Suffix varchar(50),
EmailAddress varchar(50),
Phone varchar(50),
Gender varchar(50),
Birthdate varchar(50),
--no fk
PRIMARY KEY (CustomerID)
)
insert into #TB_Customer values
('1','Sir','John','Jacob','Adams','St','johnJacobAdams@gmail.com','0677731235','M','1989-04-06'),
('2','Mr.','Russel','Thyrone','Peterson','pr','thyronePeterson@yahoo.com','555-010405','M','1963-02-01'),
('3','Ms.','Anne','Candice','Acola','aca','CandiceA@gmail.com','07408989989','F','1988-05-19'),
('4','Mrs.','Sophia','Veronika','Turner','tvs','SophiaVT@facebook.de','0423423887','F','1983-06-20'),
('5','Ms','Margaret','','Delafleur','','delaMarg@yahoo.co','233223355','Female','1982-02-25'),
('6','Mrs','Jessica','Luana','Cruz','','Jess@yahoo.com','787876631','Female','1922-05-05'),
('7','Mr','Dyrius','','Cruz','dc','dyr33@yahoo.com','0673332211','Male','1987-03-01')
update #TB_Customer
set Gender = 'Male' where Gender = 'M'
update #TB_Customer
set Gender = 'Female' where Gender = 'F'
Run Code Online (Sandbox Code Playgroud)
这样的事情也应该起作用...
SELECT concat(firstname
,CASE WHEN ISNULL(middlename,'') <> '' THEN ' '+middlename+'.'
WHEN ISNULL(middlename,'') <> '' AND ISNULL(suffix,'') = '' THEN '.'
ELSE ' ' END
,lastname
,CASE WHEN ISNULL(suffix,'') <> '' THEN ', '+suffix END)
FROM #TB_Customer
Run Code Online (Sandbox Code Playgroud)
输出:
John Jacob.Adams, St
Russel Thyrone.Peterson, pr
Anne Candice.Acola, aca
Sophia Veronika.Turner, tvs
Margaret Delafleur
Jessica Luana.Cruz
Dyrius Cruz, dc
John Adams, St
Run Code Online (Sandbox Code Playgroud)
我看不到您查询中的错误,我知道如果其中一列为空,其他所有列都是空的,但请尝试以下方式:
SELECT COALESCE(c.FIRSTNAME,'') + ' ' +
CASE WHEN COALESCE(c.MiddleName,'') = ''
THEN ''
ELSE c.MiddleName + '.'
END
+ COALESCE(c.LASTNAME,'') +
CASE WHEN COALESCE(Suffix,'') = ''
THEN ''
ELSE ', ' + Suffix
END AS CustomerName, c.*
FROM #TB_Customer c;
Run Code Online (Sandbox Code Playgroud)
@Henrik 是对的,'' 和 NULL 是不同的东西
| 归档时间: |
|
| 查看次数: |
11824 次 |
| 最近记录: |