这是我现在拥有的SQL。永远不应该丢失名字和姓氏,因为在验证界面上需要它们。但是,如果缺少中间的首字母,我不希望结果中有两个空格;我只想要一个空间。我可以放一个case语句,但是如果SQL已经有了一个用于此目的的函数,那似乎有些过分。有没有人知道是否有用于此目的的功能?代码会是什么样的?
SELECT ISNULL(contact.firstname, '')
+ ' '
+ ISNULL(contact.middleinitial, '')
+ ' '
+ ISNULL(contact.lastname, '')
FROM dbo.contact
答案 0 :(得分:7)
SELECT
ISNULL(contact.firstname, '') +
ISNULL(' ' + contact.middleinitial + ' ', ' ') +
ISNULL(contact.lastname, '')
但是,你应该删除ISNULL for firstname,lastname(定义NOT NULL?)或添加一些修剪
SELECT
LTRIM(RTRIM(
ISNULL(contact.firstname, '') +
ISNULL(' ' + contact.middleinitial + ' ', ' ') +
ISNULL(contact.lastname, '')
))
答案 1 :(得分:3)
在SQL Server 2012及更高版本中,您可以使用CONCAT功能:
SELECT CONCAT(contact.firstname, ' ' + contact.middleinitial, ' ' + contact.lastname)
FROM dbo.contact
如果 middleinitial 为null,则将空格追加到空值将导致空值,并且CONCAT将在连接期间跳过此空值。
答案 2 :(得分:1)
SELECT REPLACE(ISNULL(contact.firstname, '') + ' ' + ISNULL(contact.middleinitial, '') + ' ' + ISNULL(contact.lastname, '')
,' ',' ')
FROM dbo.contact