Как я могу посчитать количество слов в строке в Oracle?
Я пытаюсь подсчитать, сколько слов есть в строке в SQL.
Select ("Hello To Oracle") from dual;
Я хочу показать количество слов. В данном примере это будет 3 слова, хотя между словами может быть больше одного пробела.
4 ответа:
Вы можете использовать что-то подобное этому. Это возвращает длину строки, а затем вычитает длину строки с удаленными пробелами. К тому времени добавление числа один к этому должно дать вам количество слов:
Select length(yourCol) - length(replace(yourcol, ' ', '')) + 1 NumbofWords from yourtable
Смотрите SQL Fiddle with Demo
Если вы используете следующие данные:
CREATE TABLE yourtable (yourCol varchar2(15)) ; INSERT ALL INTO yourtable (yourCol) VALUES ('Hello To Oracle') INTO yourtable (yourCol) VALUES ('oneword') INTO yourtable (yourCol) VALUES ('two words') SELECT * FROM dual ;
И запрос:
Select yourcol, length(yourCol) - length(replace(yourcol, ' ', '')) + 1 NumbofWords from yourtable
Результат таков:
| YOURCOL | NUMBOFWORDS | --------------------------------- | Hello To Oracle | 3 | | oneword | 1 | | two words | 2 |
Поскольку вы используете Oracle 11g, это еще проще -
select regexp_count(your_column, '[^ ]+') from your_table
Если требуется удалить несколько пробелов, попробуйте сделать следующее:
Select length('500 text Oracle Parkway Redwood Shores CA') - length(REGEXP_REPLACE('500 text Oracle Parkway Redwood Shores CA', '( ){1,}', '')) NumbofWords from dual;
Поскольку я использовал таблицу
dual
, Вы можете проверить это непосредственно в своей собственной среде разработки.
DECLARE @List NVARCHAR(MAX) = ' ab a x'; /*Your column/Param*/ DECLARE @Delimiter NVARCHAR(255) = ' ';/*space*/ DECLARE @WordsTable TABLE (Data VARCHAR(1000)); /*convert by XML the string to table*/ INSERT INTO @WordsTable(Data) SELECT Data = y.i.value('(./text())[1]', 'VARCHAR(1000)') FROM ( SELECT x = CONVERT(XML, '<i>' + REPLACE(@List, @Delimiter, '</i><i>') + '</i>').query('.') ) AS a CROSS APPLY x.nodes('i') AS y(i) /*Your total words*/ select count(*) NumberOfWords from @WordsTable where Data is not null; /*words list*/ select * from @WordsTable where Data is not null
/из этой логики можно продолжить alon /