exp*_*des 53 postgresql intervals
如何向NOW添加动态(基于列)天数?
SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date"
FROM a;
Run Code Online (Sandbox Code Playgroud)
a.number_of_days
整数在哪里?
ara*_*nid 150
我通常将数字乘以interval '1 day'
或类似,例如:
select now() + interval '1 day' * a.number_of_days from a;
Run Code Online (Sandbox Code Playgroud)
Pau*_*l S 24
我知道这已经有一年了,但是如果你需要使用一个列来指定实际的间隔(例如'days','months',那么值得知道你也可以将你的字符串CAST到一个Interval,给出:
SELECT now()+ CAST(the_duration||' '||the_interval AS Interval)
Run Code Online (Sandbox Code Playgroud)
所以最初的问题将成为:
SELECT now() + CAST(a.number_of_days||" DAYS" AS Interval) as "The Future Date" FROM a;
Run Code Online (Sandbox Code Playgroud)
我更喜欢这种方式。我认为它非常简单和干净。在postgre中,您需要interval
将+
operator与timestamp
select (3||' seconds')::interval;
select now()+ (10||' seconds')::interval,now();
Run Code Online (Sandbox Code Playgroud)
您可以在其中使用秒,分钟...天,月...,也可以将数字替换为您的列。
select now()+ (column_name||' seconds')::interval,now()
from your_table;
Run Code Online (Sandbox Code Playgroud)
小智 7
使用make_interval()
SELECT NOW() + make_interval(days => a.number_of_days) AS "The Future Date"
FROM a;
Run Code Online (Sandbox Code Playgroud)
但一般来说,使用定义为 的列可能是一个更好的主意interval
,然后您可以在其中存储值时使用任何您想要的单位。
小智 6
要创建基于列值的间隔,我建议在表中添加两列。例如,列“period_value”::INT4 和列“period_name”::VARCHAR。列“period_name”可以存储以下值:
+--------------+-------------+ | 周期值 | 期间名称 | +--------------+-------------+ | 2 | 分钟| +--------------+-------------+
现在你可以写:
SELECT NOW() - (period_value::TEXT || ' ' || period_name::TEXT)::INTERVAL FROM table;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22845 次 |
最近记录: |