使用列值 postgresql 创建间隔

Posted

技术标签:

【中文标题】使用列值 postgresql 创建间隔【英文标题】:Create interval using a column value postgresql 【发布时间】:2015-11-06 08:19:41 【问题描述】:

我有一个类似这样的查询

select days, date(date_event)  + interval '10' day from tbl_user_marketing_program as programtable 

现在代替“10”,我想添加“天”列中的值。我该怎么做?

我试过select user_id, date(date_event) + interval user_id day from tbl_user_marketing_program as programtable

然后我得到以下错误

错误:“day”或“day”附近的语法错误 LINE 1: ...ect user_id, date(date_event) + interval user_id day from t...

【问题讨论】:

【参考方案1】:

不幸的是,间隔的“数字”不能是任意表达式,它必须是字符串常量(这是一个奇怪的选择)。您需要使用一些解决方法:

select days, date(date_event) + (days * interval '1' day) 
from tbl_user_marketing_program as programtable 

date + integer 也被直接支持,在这种情况下单位是天。所以你也可以写:

select days, date(date_event) + days 
from tbl_user_marketing_program as programtable 

【讨论】:

【参考方案2】:

您可以引用'10 days':

select days, date(date_event)  + interval '10 days'
from tbl_user_marketing_program as programtable 

SqlFiddleDemo

如果你想添加变量/列使用:

日期时间 + 变量 * INTERVAL '1 天'

select days, date(date_event)  + column * interval '1 day'
from tbl_user_marketing_program as programtable 

SqlFiddleDemo

【讨论】:

不,interval '10' day 是正确的 - 这是 SQL 标准中定义间隔文字的方式,它受 Postgres 支持 @a_horse_with_no_name 我误解了问题。无论如何 +1 为您的答案【参考方案3】:

如果days列是整数,首先将其转换为间隔类型:

select days, date(date_event)  + cast(days as interval day(7))
from tbl_user_marketing_program as programtable 

【讨论】:

cast(days as day(7)) 无效 是吗?您如何在 Postgresql 中转换为区间类型? SQL(或 Postgres)中没有函数 day(x)。有关指定间隔的正确方法,请参阅 Lad 和我的答案 糟糕,错字... cast(days as interval day(7)) 有效吗?

以上是关于使用列值 postgresql 创建间隔的主要内容,如果未能解决你的问题,请参考以下文章

postgresql数据库常规操作管理

使用 SQL 数据库查询以不同的时间间隔减去相同的列值

PostgreSQL - 使用子查询更新多个列值

pg安装入门

云小课|教你如何使用RDS for PostgreSQL插件

PostgreSQL,删除具有重新编号列值的行