Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

255
Visualizações
Cómo crear una función que devuelva el valor hasta el primer carácter decimal/no dígito

La función val debe devolver el valor numérico desde la cadena hasta el primer carácter que no sea un dígito, considerando también el primer punto decimal:

 val('1,2TEST') should return 1.2 val('1,2,3') should return 1.2 val('-1,2,3') should return -1.2 val('') shound return 0

Lo intenté

 CREATE OR REPLACE FUNCTION public.VAL(value text) RETURNS numeric AS $BODY$ SELECT coalesce(nullif('0'||substring(Translate($1,',','.'), '^-?[0-9]+\.?[0-9]*$'),''),'0')::numeric; $BODY$ language sql immutable;

pero si la cadena contiene el carácter %,

 select val('1,2%')

devuelve 0.

¿Cómo forzarlo a devolver 1.2? Debería funcionar a partir de Postgres 9

Actualizar

Gordon Fiddle para el soporte de 9.5 devuelve nulo para una cadena no numérica. Lo resolví usando wrapper:

 CREATE OR REPLACE FUNCTION public.VALwithNull(value text) RETURNS numeric AS $BODY$ SELECT replace( (regexp_matches($1, '^-?[0-9]+,*[0-9]*'))[1], ',', '.') ::numeric; $BODY$ language sql immutable; CREATE OR REPLACE FUNCTION public.VAL(value text) RETURNS numeric AS $BODY$ SELECT coalesce( VALwithNull($1) ,0) ; $BODY$ language sql immutable; select val('') , val('test'), val('-77,7%')

¿Es esta la mejor manera de admitir 9.0+?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Creo que esta expresión regular hace lo que quieres:

 replace( (regexp_match($1, '^-?[0-9]+,*[0-9]*') )[1], ',', '.')

Aquí hay un db<>fiddle.

También puede usar regexp_matches() . Hace lo mismo en este contexto.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda