按空格分割字符串并选择第二部分SQL

时间:2020-08-26 21:46:00

标签: sql sql-server string

我编写了一个查询,该查询返回一个具有一列和一行的表。

示例:

+---------------+
| playerID      | 
+---------------+
| Adam Overflow |            
+---------------+

所需结果,我想从该表中选择该名称的第二部分,以便输出为溢出

我试图弄清楚STRING_SPLIT函数,但似乎无法正常工作。 这是我尝试过的:

SELECT value FROM STRING_SPLIT(
SELECT playerID FROM Players, ' ');

玩家表如下所述。我得到的错误是:

FROM子句中的语法错误

我意识到这应该是相对简单的,这里可能会有重复的答案,但是我似乎仍然无法弄清楚。 感谢您的协助。

3 个答案:

答案 0 :(得分:2)

string_split()不是这项工作的正确工具;它是一个返回集合的函数(它创建行),并且不保证任何顺序。

您可以只使用标量字符串函数:

select 
    playerID, 
    substring(playerID, charindex(' ', playerID) + 1, len(playerID)) as shortID
from players

right()也浮现在脑海:

right(playerID, len(playerID) - charindex(' ', playerID)) as shortID

Demo on DB Fiddle

select 
    playerID, 
    substring(playerID, charindex(' ', playerID) + 1, len(playerID)) shortID1,
    right(playerID, len(playerID) - charindex(' ', playerID)) shortID2
from (values ('Adam Overflow')) as t(playerID)
GO
playerID      | shortID1 | shortID2
:------------ | :------- | :-------
Adam Overflow | Overflow | Overflow

答案 1 :(得分:0)

这应该带来所需的结果:

SELECT SUBSTRING( a.TheData , LEN(a.TheData ) -  CHARINDEX(' ',REVERSE(a.TheData )) + 2  , LEN(a.TheData )  ) results FROM (select 'playerID' as TheData
union all
select 'Adam Overflow'
union all
select 'Adam Overflow Meta') a;

答案 2 :(得分:0)

您可以使用string_split()来解决此问题:

SELECT value
FROM players p CROSS APPLY
     STRING_SPLIT(p.playerID, ' ') s
WHERE p.playerID LIKE ' ' + s.value + '%';