хранение произвольной даты в переменной в Postgres - PullRequest
0 голосов
/ 27 апреля 2018

[Это, вероятно, действительно легко, но я безуспешно гуглил слишком долго]

Я хочу сохранить серию дат в переменных в Postgres, чтобы выполнить серию запросов к ним:

\set SESSION startDate  date'2018-04-01'
\set SESSION reportDate  CURRENT_DATE

Затем я хочу выполнить ряд запросов, таких как

SELECT COUNT(id) FROM assets
WHERE target_date > :startDate
AND target_date < :reportDate;

Моя переменная "reportDate" работает нормально, но может кто-нибудь подсказать, пожалуйста, как правильно установить произвольную дату как "startDate". Я попытался всеми способами избежать значения для команды \ set безуспешно.

Я получаю ошибку:

ERROR:  column "date2018" does not exist

Я использую PostgreSQL 9.3.22.

Большое спасибо

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Я на самом деле никогда не использовал его, но я думаю, что вы можете установить свою начальную дату следующим образом:

SET SESSION myvariables.startDate = '2018-04-01';

А затем при необходимости получите его значение так:

SELECT current_setting('myvariables.startDate')::date;

":: date" это потому, что переменная хранится в виде текста и вам нужна дата.

Кроме того, если вы сделаете это таким образом, вы можете изменить значение этой переменной / параметра, используя эту функцию:

set_config(setting_name, new_value, is_local);

Пример:

select set_config('myvariables.startDate', '20170101', 'no');

Теперь значение «myvariables.startDate» должно быть «20170101».

Надеюсь, это поможет с вашей проблемой.

0 голосов
/ 27 апреля 2018

Вы должны удвоить одинарные кавычки, чтобы использовать его в psql переменных:

postgres=# \set foo 'date ''2018-04-01'''
postgres=# select :foo;
┌────────────┐
│    date    │
├────────────┤
│ 2018-04-01 │
└────────────┘

Примечание об одинарных кавычках вокруг целого значения.

Вы можете получить точное значение переменной, используя :'<variable name>':

postgres=# \set foo1 date'2018-01-01'
postgres=# \set foo2 'date ''2018-01-01'''
postgres=# select :'foo1', :'foo2';
┌────────────────┬───────────────────┐
│    ?column?    │     ?column?      │
├────────────────┼───────────────────┤
│ date2018-01-01 │ date '2018-01-01' │
└────────────────┴───────────────────┘

Или просто с помощью \set метакоманды без параметров.

0 голосов
/ 27 апреля 2018

Попробуйте to_date метод для преобразования строки в дату.

Пример:

to_date('2018-04-01','YYYY-MM-DD')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...