Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

198
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!