sql - por - ¿Cómo puedo contar la cantidad de palabras en una cadena en Oracle?
funciones de cadena sql oracle (4)
Puedes usar algo similar a esto. Esto obtiene la longitud de la cadena, luego substrae la longitud de la cadena con los espacios eliminados. Al agregar el número uno, debería darle la cantidad de palabras:
Select length(yourCol) - length(replace(yourcol, '' '', '''')) + 1 NumbofWords
from yourtable
Ver SQL Fiddle con demostración
Si usa los siguientes datos:
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
;
Y la consulta:
Select yourcol,
length(yourCol) - length(replace(yourcol, '' '', '''')) + 1 NumbofWords
from yourtable
El resultado es:
| YOURCOL | NUMBOFWORDS |
---------------------------------
| Hello To Oracle | 3 |
| oneword | 1 |
| two words | 2 |
Estoy tratando de contar cuántas palabras hay en una cadena en SQL.
Select ("Hello To Oracle") from dual;
Quiero mostrar el número de palabras. En el ejemplo dado, serían 3 palabras, aunque podría haber más de un espacio entre las palabras.
Si su requisito es eliminar múltiples espacios también, intente esto:
Select length(''500 text Oracle Parkway Redwood Shores CA'') - length(REGEXP_REPLACE(''500 text Oracle Parkway Redwood Shores CA'',
''( ){1,}'', '''')) NumbofWords
from dual;
Como utilicé la tabla dual
, puede probar esto directamente en su propio entorno de desarrollo.
Ya que estás usando Oracle 11g es incluso más simple-
select regexp_count(your_column, ''[^ ]+'') from your_table
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
/ de esta Lógica puedes continuar alon /