我需要一个查询,该查询将提取字符串的第一个第二个和第三个单词。
每行大约有5个单词,并且同一行(1行)的5个单词中仅需要前三个单词。示例“ ATV BDSG 232用其他单词继续”。
我只需要在前一行(例如同一行)中将前三个单词一起放在第一行,例如“ ATV BDSG 232”。该表大约有1000行,在它的末尾,我应该又有1000行,但每行应仅包含字符串的前三个字。
我发现了一个查询,该查询对于提取堆栈溢出中讨论的“ ATV BDSG”之类的前两个非常有用。查询是
“从表中选择SUBSTRING(field1,0,CHARINDEX(’‘,field1,CHARINDEX(’‘,field1,0)+1))
我们可以导出前三个单词来得出吗?
提前致谢
如果不想创建专用功能,则可以使用连续的CROSS APPLYs:
CROSS APPLY
SELECT T.s, FirstSpace.i, SecondSpace.j, ThirdSpace.k, CASE When ThirdSpace.k > 0 THEN LEFT(T.s, Thirdspace.k - 1) ELSE T.S END AS Phrase FROM t CROSS APPLY (SELECT CHARINDEX(' ', T.s, 1)) AS FirstSpace(i) CROSS APPLY (SELECT CHARINDEX(' ', T.S, FirstSpace.i + 1)) AS SecondSpace(j) CROSS APPLY (SELECT CHARINDEX(' ', T.s, SecondSpace.j + 1)) AS ThirdSpace(k)
为您提供所需的结果:
| s | i | j | k | phrase | |----------------------------------------|---|---|----|------------------| | ATV BDSG 232 Continue with other words | 4 | 9 | 13 | ATV BDSG 232 |