Sql server 如何在连接时删除空白,而有些是空值?
我正在尝试连接一些没有中间名的玩家的名字。当连接如下时,我得到了一个没有中间名的玩家的空白,逻辑适用于中间名的玩家。如何仅删除空值列不需要的空白 我只需要连接表达式中中间名称的首字母Sql server 如何在连接时删除空白,而有些是空值?,sql-server,sql-server-2016,string-concatenation,Sql Server,Sql Server 2016,String Concatenation,我正在尝试连接一些没有中间名的玩家的名字。当连接如下时,我得到了一个没有中间名的玩家的空白,逻辑适用于中间名的玩家。如何仅删除空值列不需要的空白 我只需要连接表达式中中间名称的首字母 SELECT m_playerid, first_name + ' ' + SUBSTRING (coalesce (middle_ name, ' '), 1,1) + ' ' + last_name as [Full name] , game as Game, inns as Innings, [scores]
SELECT m_playerid, first_name + ' ' + SUBSTRING (coalesce (middle_
name, ' '), 1,1) + ' ' + last_name as [Full name]
, game as Game, inns as Innings, [scores] as Scores FROM odsports
难道我不应该引入一个条件来移除
空的空格?我被打动了
您可以使用这样一个事实,即使用
+
运算符将NULL
连接到任何对象会生成NULL
,而CONCAT
函数会将NULL
转换为空字符串
因此,CONCAT(first_name',LEFT(middle_name,1)+'',last_name)
将根据需要处理空的中间名,如下面的示例所示
WITH T(first_name, middle_name, last_name) AS
(
SELECT 'Franklin', 'Delano', 'Roosevelt' union all
SELECT 'Barack', NULL, 'Obama'
)
SELECT CONCAT(first_name, ' ', LEFT(middle_name,1) + ' ', last_name)
FROM T
返回
+----------------------+
| (No column name) |
+----------------------+
| Franklin D Roosevelt |
| Barack Obama |
+----------------------+
为双空格添加替换,并使用isnull函数。试试这个
SELECT
m_playerid,
REPLACE(
LTRIM(RTRIM(ISNULL(first_name ,'')))
+CASE WHEN middle_name IS NULL
THEN ' '
ELSE ' '+LEFT(ISNULL(middle_name,' '),1)+' ' END
+
LTRIM(RTRIM(ISNULL(last_name,'')))
,' ',' ') as [Full name],
game as Game,
inns as Innings,
[scores] as Scores
FROM odsports
试试这个:
SELECT m_playerid,
COALESCE(first_name + ' ' + middle_name + ' ' + last_name,
first_name + ' ' + last_name,
first_name,
last_name) as [Full name],
game as Game,
inns as Innings,
[scores] as Scores
FROM odsports
对于中间名为空的玩家,它只给出第一个名字。您执行过查询吗?即使名字是空的,它也会去掉白色的空格,我做到了!但还是一样@马丁·史密斯的答案解决了这个问题。额外的空格仍然存在!!!名称的每个部分之间只需要1个空格。感谢您为姓氏提供空值的条件,在我们的例子中,名字和姓氏不能为空。@C82那么名字和姓氏上可能有尾随空格。我已经更新了答案,请尝试在预期条件的上下文中指定的非布尔类型的表达式,靠近“ISDATE”@马丁·史密斯回答道。它很瘦。
SELECT
m_playerid,
LTRIM(CONCAT(first_name,Space(1),LTRIM(RTRIM(middle_name+space(1)+last_name))))
as [Full name],
game as Game,
inns as Innings,
[scores] as Scores
FROM odsports