如何在某些具有 Null 值的情况下连接时删除空格?

How to remove the whitespace while concatenating while some have Null values?

我正在尝试连接一些没有中间名的球员的名字。如下所示连接时,我为没有中间名的玩家获得白色 space,逻辑适用于有中间名的玩家。如何单独删除 NULL 值列不需要的 whitespace?

我只想要连接表达式中中间名的首字母。

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

Shouldn't I be introducing a condition to get remove of the whitespace for NULL? I am struck!

您可以使用这样一个事实,即使用 + 运算符将 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

Returns

+----------------------+
|   (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
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