В описанном операторе это делается без функции, поэтому попробуйте это для одной строки (при условии, что у вас есть таблица «Числа» ):
--sp GEN_FN_GEN_ListToTable
DECLARE @String varchar(500)
,@SplitOn char(1)
SELECT @String='the quick red fox jumped over the lazy brown dog, again.'
,@SplitOn=' '
SELECT
COUNT(*) AS VowelCount
FROM (SELECT
LTRIM(RTRIM(SUBSTRING(List2, number+1, CHARINDEX(@SplitOn, List2, number+1)-number - 1))) AS ListValue
FROM (
SELECT @SplitOn + @String + @SplitOn AS List2
) AS dt
INNER JOIN Numbers n ON n.Number < LEN(dt.List2)
WHERE SUBSTRING(List2, number, 1) = @SplitOn
) dt2
WHERE ListValue IS NOT NULL AND ListValue!='' AND LEFT(ListValue,1) IN ('a','e','i','o','u')
ВЫХОД:
VowelCount
-----------
2
(1 row(s) affected)
вот пример того, как посчитать гласные (без функции) со многими строками в таблице (при условии, что у вас есть «Числа» таблица):
DECLARE @YourTable table (RowID int, RowValue varchar(500))
INSERT INTO @YourTable VALUES (1,'the quick red fox jumped over the lazy brown dog, again.')
INSERT INTO @YourTable VALUES (2,'just another example of some words.')
INSERT INTO @YourTable VALUES (3,'a b c d e f g h i j k l m n o p q r s t u v w x y z')
SELECT
RowID,COUNT(*) AS VowelCount
FROM (SELECT
RowID, LTRIM(RTRIM(SUBSTRING(List2, number+1, CHARINDEX(' ', List2, number+1)-number - 1))) AS ListValue
FROM (SELECT
RowID, ' ' + RowValue + ' ' AS List2
FROM @YourTable
) AS dt
INNER JOIN Numbers n ON n.Number < LEN(dt.List2)
WHERE SUBSTRING(List2, number, 1) = ' '
) dt2
WHERE ListValue IS NOT NULL AND ListValue!='' AND LEFT(ListValue,1) IN ('a','e','i','o','u')
GROUP BY RowID
ВЫХОД:
RowID VowelCount
----------- -----------
1 2
2 3
3 5
(3 row(s) affected)
В основном вам нужно получить функцию разделения, а затем разделить ее на один пробел, здесь есть аналогичный ответ , который объясняет функцию разделения и использованиеЭто.Я не уверен, почему ОП не хочет использовать функцию.