dynamic(基于列)的时间间隔
如何为NOW添加dynamic(基于列)天数?
SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date" FROM a;
a.number_of_days
是一个整数?
我通常乘以interval '1 day'
或类似的数字,例如:
select now() + interval '1 day' * a.number_of_days from a;
我知道这已经一年了,但是如果你需要使用一个列来指定实际的时间间隔(例如'days','months',那么值得知道的是你也可以把你的string转换为一个间隔,给出:
SELECT now()+ CAST(the_duration||' '||the_interval AS Interval)
所以原来的问题会变成:
SELECT now() + CAST(a.number_of_days||" DAYS" AS Interval) as "The Future Date" FROM a;
要创build基于列值的区间,我build议在表格中添加两列。 例如,列“period_value”:: INT4和列“period_name”:: VARCHAR。 列“period_name”可以存储以下值:
- 微秒
- 毫秒
- 第二
- 分钟
- 小时
- 天
- 周
- 月
- 25美分硬币
- 年
- 十
- 世纪
- 千年
+ -------------- + ------------- + | period_value | period_name | + -------------- + ------------- + | 2 | 分钟| + -------------- + ------------- +
现在你可以写:
SELECT NOW() - (period_value::TEXT || ' ' || period_name::TEXT)::INTERVAL FROM table;
如果我们有间隔string值的字段,如“41年11个月4天”,并且想将其转换为出生date,则使用此查询:
UPDATE "february14" set dob = date '2014/02/01' - (patient_age::INTERVAL)
例如,dob是将“ 41年11周岁4天”转换为“1972/10/14”的date字段
patient_age是varchar字段,像“41年11周4天”
这是查询将年龄转换回出生date
SELECT now() - INTERVAL '41 years 10 mons 10 days';
我更喜欢这种方式。 我觉得它很简单,干净。 在Postgre你需要interval
使用+
运算符
select (3||' seconds')::interval; select now()+ (10||' seconds')::interval,now();
在那里你可以使用秒,分钟…天,月…,你可以将数字replace到您的列。
select now()+ (column_name||' seconds')::interval,now() from your_table;