Все просто, SQL Server предоставляет функцию STRING_SPLIT()
, что делает это слишком простым
DECLARE @Var VARCHAR(100) = 'ATV BDSG 232 Continue with other words';
SELECT Word
FROM
(
SELECT Value AS Word,
ROW_NUMBER()OVER(ORDER BY (SELECT NULL)) RN
FROM STRING_SPLIT(@Var, ' ')
) T
WHERE RN <= 3;
Но поскольку вы работаете над версией 2012, вам нужно определить свою собственную функцию.
Вы также можете выбрать сложный путь, сначала вам нужно получить первое слово, затем заменить его на ''
и получить второе слово, а затем сделать то же самое для третьего слова, как
DECLARE @Var VARCHAR(100) = 'ATV BDSG 232 Continue with other words';
WITH FW AS
(
SELECT LEFT(@Var, CHARINDEX(' ', @Var)) FirstWord
),
SW AS
(
SELECT LEFT(REPLACE(@Var, FirstWord, ''),
CHARINDEX(' ', REPLACE(@Var, FirstWord, ''))) SecondWord
FROM FW
)
SELECT FirstWord,
SecondWord,
LEFT(REPLACE(REPLACE(V, FirstWord, ''), SecondWord, ''),
CHARINDEX(' ', REPLACE(REPLACE(V, FirstWord, ''), SecondWord, ''))
) ThirdWord
FROM
(
SELECT *, @Var V
FROM FW CROSS APPLY SW
) T
Демо
ОБНОВЛЕНИЕ
Если вы хотите выбрать три первых слова, просто
SELECT SUBSTRING(Str, 0, CHARINDEX(' ', Str, CHARINDEX(' ', Str, CHARINDEX(' ', Str, 0)+1)+1)) Words
FROM Strings
Демо