Вы можете упростить до:
SELECT expire_date - (expire_date - now()) - interval '1 month'
FROM "License"
WHERE license_id = 10
Это действительно без дополнительных скобок, потому что вычитания оцениваются слева направо.
В моей первой версии одиннеобходимая пара скобок отсутствовала.
Эта форма запроса также предотвращает ошибку в случае, если license
не должно быть уникальным.Вместо этого вы получите несколько строк.В этом случае и, если вам это нужно, добавьте LIMIT 1
, гарантирующее одно значение.
@ Милен правильно диагностировала причину ошибки.Поэкспериментируйте с этими утверждениями, чтобы увидеть:
SELECT interval (interval '1 month'); -- error
SELECT (interval '1 month')::interval; -- no error
Однако лечение проще.Только не добавляйте другой состав, это излишне.