"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo extraer de manera confiable el enésimo valor de una lista separada por comas en SQL, manejando nulos?

¿Cómo extraer de manera confiable el enésimo valor de una lista separada por comas en SQL, manejando nulos?

Publicado el 2025-02-12
Navegar:150

How to Reliably Extract the Nth Value from a Comma-Separated List in SQL, Handling Nulls?
, considere el siguiente escenario:

sql> seleccione Regexp_Substr ('1,2,3,4,5,6', '[^,]', 1, 2) datos de dual; D - 2 Esta consulta recupera con éxito el segundo valor no nulo ("2") de la lista usando la expresión regular [^,]. Sin embargo, cuando el segundo valor es nulo, la consulta devuelve el tercer elemento:

sql> seleccione REGEXP_SUBSTR ('1 ,, 3,4,5,6', '[^,]', 1, 2 ) datos de dual; D - 3

para abordar este problema, se necesita una regex más flexible para permitir caracteres opcionales:

SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,] ', 1, 2) data
from dual;

D
-
2

Sin embargo, esta regex también falla para los números más allá del nulo.

SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,] ', 1, 2) data
from dual;

D
-
3

regex_substr ('1, 3, 3, 3, 3, 3, 4,5 ',' (.*?) (, | $) ', 1, 2, nulo, 1)

SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data
from dual;

D
-
3

data ----

para encapsular esta solución en una función reutilizable, considere el siguiente código:

REGEX_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1)

Esta función se puede llamar así:

Data
----

independientemente de los posibles nulls o el Seleccionando un elemento específico, esta solución proporciona un método robusto y elegante para extraer valores de listas separadas por comas en Oracle SQL.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3