Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

197
Vistas
Cómo integrar una construcción CASE con la palabra clave VARIADIC como entrada para format()

¿Cómo puedo usar VARIADIC para pasar una matriz de argumentos a la función FORMAT() dependiendo de una condición CASE en PostgreSQL 11?

Esto, por ejemplo, funciona:

 SELECT FORMAT('Hi %s, I am %s', VARIADIC ARRAY['John', 'Paul']);

hola juan soy pablo

Esto también funciona:

 SELECT FORMAT('Hello %s, I am %s.', CASE WHEN 1 = 1 THEN 'John' ELSE 'Mary' END, CASE WHEN 1 = 1 THEN 'Paul' ELSE 'Elli' END);

Hola Juan, soy Pablo.

Esto, sin embargo, no:

 SELECT FORMAT('Hello %s, I am %s.', CASE WHEN 1 = 1 THEN VARIADIC ARRAY['John', 'Paul'] ELSE VARIADIC ARRAY['Mary', 'Elli'] END);

ERROR: error de sintaxis en o cerca de "VARIADIC" LÍNEA 3: CUANDO 1 = 1 THEN VARIADIC ARRAY['John', 'Paul...

Teóricamente debería funcionar, y si lo hace me evitará repetir CASE tantas veces como parámetros tenga que pasar. No quiero rodear FORMAT con CASE porque mi cadena es enorme.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

VARIADIC es un modificador para la entrada de matriz en funciones. format() pasa a usarlo. El manual:

Las funciones concat , concat_ws y format son variadic , por lo que es posible pasar los valores a concatenar o formatear como una matriz marcada con la palabra clave VARIADIC (consulte la Sección 38.5.5 ).

No ocurre lo mismo con una construcción CASE , que para empezar ni siquiera es una función . Todavía hay una solución simple:

 SELECT format('Hello %s, I am %s.', VARIADIC -- here! CASE WHEN true THEN ARRAY['John', 'Paul'] ELSE ARRAY['Mary', 'Elli'] END);

Acabas de colocar mal la palabra clave. VARIADIC es un modificador de entrada . No aplicable a la salida.

¿Combinar parámetros de matriz y no matriz?

(Respuesta a la pregunta en el comentario).
No es posible pasar cadenas individuales y una matriz al mismo tiempo. Concatene todos los argumentos en una sola matriz antes de pasar al modo VARIADIC :

 SELECT format E'Title: %s\nHi %s, I am %s.'::text, VARIADIC 'MyTitle'::text || ARRAY['John', 'Paul']);

O coloque todo en una matriz para empezar, si tiene el control de los parámetros. Demostrando un literal de matriz esta vez:

 SELECT format(E'Title: %s\nHi %s, I am %s.'::text, VARIADIC '{MyTitle, John, Paul}'::text[]);

Relacionada:

  • Pase el literal de matriz a la función PostgreSQL
  • Devolver filas que coincidan con los elementos de la matriz de entrada en la función plpgsql
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda