PSQL:将set date变量传递给datetime时出现语法错误

时间:2017-08-11 16:55:13

标签: sql postgresql datetime syntax psql

我在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

我通常知道日期你应该设置三组撇号来正确读取它(我从来没有查过原因),但是我把这个日期输入到一个日期时间,所以我认为不使用撇号会工作,但我被抛出这个错误:

ERROR:  invalid input syntax for type timestamp: ":from_date 06:00:00"
LINE 40: between ':from_date 06:00:00'

通常在bash脚本中这可以工作,因为它只传递文字字符串值,但在这种情况下,无论我在日期值周围放置否或一组撇号它都不会传递值(我假设因为PSQL处理设置变量的方式。

我知道有解决方法,但我正在寻找一个理由为什么这样的事情会发生,以及是否有一种简单的方法来修复“无效的输入语法” - 是否它是通过铸造变量,以不同的方式设置变量等。

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

:from_date是一个不是字符串的变量。

这是一种方法:

 date :from_date + time ' 06:00:00'

请参阅https://www.postgresql.org/docs/9.2/static/functions-datetime.html

上的文档