如何在某些具有 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
我正在尝试连接一些没有中间名的球员的名字。如下所示连接时,我为没有中间名的玩家获得白色 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