"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como extrair de forma confiável o enésimo valor de uma lista separada por vírgula no SQL, lidando com nulas?

Como extrair de forma confiável o enésimo valor de uma lista separada por vírgula no SQL, lidando com nulas?

Postado em 2025-02-12
Navegar:972

How to Reliably Extract the Nth Value from a Comma-Separated List in SQL, Handling Nulls?

solução regex para selecionar o valor específico da lista separada por vírgula com nulls

ao extrair o valor do Nth de uma lista de vírgula e separação usando regexp_subsstr. (), o manuseio de valores nulos pode ser complicado. Aqui está um exame detalhado do problema e uma solução abrangente. '[^,]', 1, 2) dados de dual; D - 2

Esta consulta recupera com sucesso o segundo valor não nulo ("2") da lista usando a expressão regular [^,]. No entanto, quando o segundo valor é nulo, a consulta retorna o terceiro item:

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

D
-
2

Para resolver esse problema, é necessário um regex mais flexível para permitir caracteres opcionais:

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

D
-
3

No entanto, este regex também falha para números após o null. 4,5 ',' (.*?) (, | $) ', 1, 2, null, 1)

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

D
-
3

data -----

para encapsular esta solução em uma função reutilizável, considere o seguinte código:

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

Esta função pode ser chamada assim:

Data
----
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3