تجزیه یک رشته به کلمات تشکیل دهنده آن توسط Recursive CTE
نویسنده: محمد سلیم آبادی
تاریخ: ۱۳۹۱/۱۰/۲۹ ۲۱:۴۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
DECLARE @S VARCHAR(50)='I am a student I go to school ';
WITH CTE AS
(
SELECT 1 rnk,
1 start,
CHARINDEX(' ', @s) - 1 ed
UNION ALL
SELECT rnk + 1,
ed + 2,
CHARINDEX(' ', @s, ed + 2) - 1
FROM CTE
WHERE CHARINDEX(' ', @s, ed + 2) > 0
)
SELECT rnk, SUBSTRING(@s, start, ed - start + 1) AS word
FROM CTE
/* Result
rnk word
----------- -------
1 I
2 am
3 a
4 student
5 I
6 go
7 to
8 school
*/
DECLARE @a VARCHAR(50)='I am a student I go to school ';
WITH MyWords(ranking, word, string) AS(
SELECT 1,
CAST(SUBSTRING(@a, 1, CHARINDEX(' ', @a) - 1) AS VARCHAR(25)),
STUFF(@a, 1, CHARINDEX(' ', @a), '')
UNION ALL
SELECT ranking + 1,
CAST(SUBSTRING(string, 1, CHARINDEX(' ', string) - 1) AS VARCHAR(25)),
STUFF(string, 1, CHARINDEX(' ', string), '')
FROM MyWords
WHERE CHARINDEX(' ', string) > 0
)
SELECT ranking, word FROM MyWords;
ranking word ----------- ------------------------- 1 I 2 am 3 a 4 student 5 I 6 go 7 to 8 school