我编写了一个查询,该查询返回一个具有一列和一行的表。
示例:
+---------------+
| playerID |
+---------------+
| Adam Overflow |
+---------------+
所需结果,我想从该表中选择该名称的第二部分,以便输出为溢出。
我试图弄清楚STRING_SPLIT函数,但似乎无法正常工作。 这是我尝试过的:
SELECT value FROM STRING_SPLIT(
SELECT playerID FROM Players, ' ');
玩家表如下所述。我得到的错误是:
FROM子句中的语法错误
我意识到这应该是相对简单的,这里可能会有重复的答案,但是我似乎仍然无法弄清楚。 感谢您的协助。
答案 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
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 + '%';