Проблем:
Искате да разделите низ в SQL Server.
Пример 1:
Имате изречение и искате да го разделите с интервал.
Решение 1:
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Резултатът изглежда така:
стойност |
---|
A |
пример |
изречение. |
Дискусия:
Функцията STRING_SPLIT(низ, разделител) в SQL Server разделя низа в първия аргумент чрез разделителя във втория аргумент. За да разделите изречение на думи, посочете изречението като първи аргумент на STRING_SPLIT()
функция и ' ' като втори аргумент.
STRING_SPLIT()
води до колона с име стойност. За да получите всяка част от низа в отделен ред, изберете стойност от STRING_SPLIT(string, separator)
. Например,
SELECT value FROM STRING_SPLIT('An example sentence.', ' ');
Разбира се, можете да разделите низ, като използвате друг разделител, например запетая. Можете също да преименувате колоната, както всяка друга колона.
Пример 2:
В texts
таблица, има няколко изречения.
изречение |
---|
Това е първото изречение. |
А ето и другия. |
Искате да разделите изреченията с интервал.
Решение 2:
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Резултатът изглежда така:
стойност |
---|
Това |
е |
на |
първи |
изречение. |
И |
ето ви |
на |
други |
един. |
Дискусия:
Точно както в предишния пример, функцията STRING_SPLIT(текст, разделител) разделя низа, даден като първи аргумент от разделителя. Този път имате няколко изречения, за които да се погрижите; тези изречения се съхраняват в texts
маса. Ето защо трябва да използвате CROSS APPLY; по-конкретно,
texts CROSS APPLY STRING_SPLIT(sentence, ' ')
Използвайте го в FROM
клауза. Това означава, че дясната страна (STRING_SPLIT(sentence, ' ')
) се прилага към всеки ред от лявата таблица (texts
). Ето защо дясната страна може да използва колоните от лявата таблица (тук колоната на изречението от texts
таблица.) Ето заявката, която получавате.
SELECT value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Пример 3:
В texts
таблица, има две колони:id
и sentence
.
id | изречение |
---|---|
1 | Това е първото изречение. |
2 | А ето и другия. |
Искате да разделите изреченията с интервал и също така да покажете идентификаторите на изреченията.
Решение 3:
SELECT id, value FROM texts CROSS APPLY STRING_SPLIT(sentence, ' ');
Резултатът изглежда така:
id | стойност |
---|---|
1 | Това |
1 | е |
1 | на |
1 | първи |
1 | изречение. |
2 | И |
2 | ето |
2 | на |
2 | други |
2 | един. |
Дискусия:
Този пример е много подобен, но вие също искате да видите id
колона. За да видите тази колона, просто я добавете към SELECT
списък и не забравяйте да включите запетаята. Ще видите идентификатора на изречението заедно с частите от изреченията в резултата. Например, първото изречение е разделено на 5 части и има ID 1
. Следователно идентификаторът за всичките 5 части в таблицата с резултати ще бъде 1
. Следващото изречение с идентификатор 2
, също е разделена на 5 части и всяка от тези части ще бъде показана с id = 2
.