PSQL:将设置日期变量传递到日期时间时出现语法错误
PSQL: Syntax error when passing set date variable into datetime
我在 psql 中的服务器端(使用 SSH)工作,我在其中使用“\set”命令设置变量。
我担心的是:我有一个查询,我在其中将一组字符串(日期)插入到日期时间中,但出现语法错误。
简单示例:
SELECT
network_no,
program_no,
national_datetime.
FROM
views
WHERE
national_datetime
between ':from_date 06:00:00'
and ':to_date 05:59:59'::timestamp + '1 day'::interval
其中 'from_date' 和 'to_date' 已相应设置:
\set from_date 2017-07-10
\set to_date 2017-07-16
我知道通常你应该设置三组撇号才能正确读取日期(我从来没有查过原因),但我将这个日期输入日期时间,所以我想使用 no撇号会起作用,但我会抛出这个错误:
ERROR: invalid input syntax for type timestamp: ":from_date 06:00:00"
LINE 40: between ':from_date 06:00:00'
通常在 bash 脚本中这会起作用,因为它只传递文字字符串值,但在这种情况下,无论我在日期值周围放置没有或一组撇号,它都不会传递值(我假设是因为 PSQL 处理设置变量的方式。
我知道有办法解决这个问题,但我正在寻找 为什么 会发生这样的事情的原因,以及是否有简单的方法来解决 "invalid input syntax"--无论是通过转换变量,以不同方式设置变量等。
非常感谢!
:from_date
是一个不是字符串的变量。
这里有一个方法:
date :from_date + time ' 06:00:00'
请参阅 https://www.postgresql.org/docs/9.2/static/functions-datetime.html
上的文档
我在 psql 中的服务器端(使用 SSH)工作,我在其中使用“\set”命令设置变量。
我担心的是:我有一个查询,我在其中将一组字符串(日期)插入到日期时间中,但出现语法错误。
简单示例:
SELECT
network_no,
program_no,
national_datetime.
FROM
views
WHERE
national_datetime
between ':from_date 06:00:00'
and ':to_date 05:59:59'::timestamp + '1 day'::interval
其中 'from_date' 和 'to_date' 已相应设置:
\set from_date 2017-07-10
\set to_date 2017-07-16
我知道通常你应该设置三组撇号才能正确读取日期(我从来没有查过原因),但我将这个日期输入日期时间,所以我想使用 no撇号会起作用,但我会抛出这个错误:
ERROR: invalid input syntax for type timestamp: ":from_date 06:00:00"
LINE 40: between ':from_date 06:00:00'
通常在 bash 脚本中这会起作用,因为它只传递文字字符串值,但在这种情况下,无论我在日期值周围放置没有或一组撇号,它都不会传递值(我假设是因为 PSQL 处理设置变量的方式。
我知道有办法解决这个问题,但我正在寻找 为什么 会发生这样的事情的原因,以及是否有简单的方法来解决 "invalid input syntax"--无论是通过转换变量,以不同方式设置变量等。
非常感谢!
:from_date
是一个不是字符串的变量。
这里有一个方法:
date :from_date + time ' 06:00:00'
请参阅 https://www.postgresql.org/docs/9.2/static/functions-datetime.html
上的文档