Як додати у PostgreSQL тернарний оператор?
#db
TL;DR; додайте замість тернарника збережену процедура iif
PostgreSQL має дуже обмежену функціональність для умовних виразів (Conditional Expressions):
–
–
–
–
Тернарного оператора немає, його заміна за допомогою
Багатослівно, та й ще важко знаходити помилки коли використовуються різні типи даних. Це типова проблема на проектах з LowCode admin UI (наприклад retool) чи LowCode Analytics (наприклад Looker Studio).
Для спрощення я додаю збережену процедура:
Після цього можна використовувати
Читати та підтримувати це простіше. Особливо аналітикам, які звикли до Google Sheets.
⚠️Традиційне застереження⚠️ не використовує збережені процедури для бізнес-логіки, бо це розмазує її реалізацію між Node.js кодом та кодом збережених процедур.
#db
TL;DR; додайте замість тернарника збережену процедура iif
PostgreSQL має дуже обмежену функціональність для умовних виразів (Conditional Expressions):
–
CASE дуже схожий на switch case–
COALESCE, що повертає перший зі своїх аргументів, який не є нульовим–
NULLIF повертає null, якщо значення дорівнює одне іншому; інакше повертає перше значення.–
GREATEST/LEAST повертає найбільше/найменше значенняТернарного оператора немає, його заміна за допомогою
CASE виглядає так:CASE WHEN condition THEN true_result ELSE false_result ENDБагатослівно, та й ще важко знаходити помилки коли використовуються різні типи даних. Це типова проблема на проектах з LowCode admin UI (наприклад retool) чи LowCode Analytics (наприклад Looker Studio).
Для спрощення я додаю збережену процедура:
CREATE or replace FUNCTION iIF( condition boolean, -- IF condition true_result anyelement, -- THEN false_result anyelement -- ELSE) RETURNS anyelement AS $f$ SELECT CASE WHEN condition THEN true_result ELSE false_result END$f$ LANGUAGE SQL IMMUTABLE;Після цього можна використовувати
iff(condition, true_result, false_result)Читати та підтримувати це простіше. Особливо аналітикам, які звикли до Google Sheets.
⚠️Традиційне застереження⚠️ не використовує збережені процедури для бізнес-логіки, бо це розмазує її реалізацію між Node.js кодом та кодом збережених процедур.
👍21🔥3❤2