假设我正在做类似的查询(其中due_date
属于类型date
) :
SELECT
(due_date + (7 * INTERVAL '1 DAY')) AS due_date_mod
FROM test_table
所结果的due_date_mod
是类型timestamp
.
这是有道理的,因为操作的结果应该是一种类型,无论具体值如何,并且间隔可以有小时/分钟/秒。
但是有没有一种方法可以在日期中添加天/月/年,而不需要结果是时间戳,并且显然也不需要转换?还是铸造是唯一的方法?
我知道我可以使用以下方法添加天数:
SELECT
(due_date + INTEGER '7') AS due_date_mod
结果是类型date
.
但是我可以在几个月或几年内做类似的事情(而不将它们转换为几天)吗?
EDIT:
似乎没有满足问题要求的解决方案。获得所需结果的正确方法位于标记的答案中。
您已经发现您可以添加integer
to date
添加天数,返回date
:
SELECT due_date + 7 AS due_date_mod -- type date
FROM test_table;
(Since date
里面是一个整数,添加起来非常简单且便宜integer
to it.)
正如你在表中看到的日期/时间运算符 https://www.postgresql.org/docs/current/functions-datetime.html#OPERATORS-DATETIME-TABLE手册中没有其他操作员会返回date
(和不function https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-TABLE, 任何一个)。
并且单位“月”必须相对于左操作数进行解释(因为月的天数不同)。因此,您不能简单地从月份中提取天数。你必须使用date + interval
把它做好。只需添加一个演员,它很简单而且非常便宜:
SELECT (due_date + interval '3 months')::date AS due_date_mod
FROM test_table;
你知道(7 * interval '1 mon') = interval '7 mon'
, right?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)