使用列值 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 创建间隔的主要内容,如果未能解决你的问题,请参考以下文章