Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在连接时删除空白,而有些是空值?_Sql Server_Sql Server 2016_String Concatenation - Fatal编程技术网

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