@estry

Как вернуть в Postgresql булевое значение в условных операторах?

Есть запрос с if, then, else. Как из ветвлений возращать true или false?
Пример
IF NOT EXISTS (SELECT ...) THEN 
	INSERT INTO ...;
	ВЕРНУТЬ TRUE
ELSE
	IF (SELECT ...) <= 0 THEN
		UPDATE ...;
		ВЕРНУТЬ FALSE
	ELSE
		UPDATE ...;
		ВЕРНУТЬ TRUE
	END IF;
END IF;
  • Вопрос задан
  • 387 просмотров
Решения вопроса 1
iMedved2009
@iMedved2009
Не люблю людей
estry, ну вы след раз запрос целиком пишите. и понятнее и может вашу конструкцию можно сделать легче

with t_check as (
select coalesce((select DATE_PART('day', (date_pay::timestamp - now()::timestamp))>=0 from t where user_id = 1 limit 1), true) as is_added
)
INSERT INTO t (user_id, date_pay)
VALUES (1, '2022-09-01 00:00:00')
ON CONFLICT (user_id) DO UPDATE set date_pay = (
    case when DATE_PART('day', (date_pay::timestamp - now()::timestamp)) <= 0
        then date_pay + interval '31 day'
    else now() + interval '31 day' end
) returning (select is_added from t_check limit 1);


Тыц
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы