加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Postgresql,根据另一列添加(年,月或日)到目前为止

发布时间:2020-12-13 15:57:02 所属栏目:百科 来源:网络整理
导读:我需要一个来自8.4 POSTGRESQL数据库的查询来列出我所订购的所有产品,该日期代表产品保修结束的实际日期. 表格是这样的,我会简单的说: PRODUCT (varchar) WARRANTY (int)TYPE_WARRANTY (char) ( 'Y','M','D' ) -- Years,Months or DaysCREATED_AT (date) 举
我需要一个来自8.4 POSTGRESQL数据库的查询来列出我所订购的所有产品,该日期代表产品保修结束的实际日期.

表格是这样的,我会简单的说:

PRODUCT (varchar) 
WARRANTY (int)
TYPE_WARRANTY (char) ( 'Y','M','D' ) -- Years,Months or Days
CREATED_AT (date)

举个例子:

PRODUCT  |  WARRANTY  |  TYPE_WARRANTY  |  CREATED_AT 
------------------------------------------------------
'PROD A' |      1     |       'Y'       | '2014-01-01'
'PROD B' |     10     |       'M'       | '2014-06-01'
'PROD C' |     30     |       'D'       | '2014-01-01'

我需要的是一个查询,它将带给我这个:

PRODUCT  |  WARRANTY  |  TYPE_WARRANTY  |  CREATED_AT  | WARRANTY_ENDS | DAYS
-----------------------------------------------------------------------------
'PROD C' |    30      |       'D'       | '2014-01-01' | '2014-01-31'  | -175
'PROD A' |     1      |       'Y'       | '2014-01-01' | '2015-01-01'  | 160
'PROD B' |    10      |       'M'       | '2014-06-01' | '2015-04-01'  | 250

我希望你能理解它

所以我需要的是选择所有产品并在保修期结束时订购,包括今天和该日期之间的天数.

我已经拥有的东西:

我知道如何获取日期,我知道如何将日期添加到日期,我现在需要的是一种使查询理解我想根据type_warranty列的值添加间隔的方法.

我在这里使用’1年’作为例子并且它有效但我需要它像“1个月”和“1天”一样动态地工作.

SELECT 
  PRODUCT,WARRANTY,TYPE_WARRANTY,CREATED_AT,(CREATED_AT + (WARRANTY * '1 year'::INTERVAL)) as WARRANTY_ENDS,EXTRACT(day from age((CREATED_AT + '1 year',current_date)) as days
FROM TABLE
order by days;

这是有效的,但只有多年,当然,我不知道如何将’1年’转换为’1个月’或’1天’,具体取决于warranty_type

你有什么想法可以提供帮助吗?

解决方法

我现在没有安装PostgreSQL 8.4,但这有用吗?

SELECT
    PRODUCT,(CREATED_AT + (WARRANTY *
        CASE TYPE_WARRANTY
            WHEN 'Y' THEN '1 year'::interval
            WHEN 'M' THEN '1 month'::interval
            WHEN 'D' THEN '1 day'::interval
        END
    ))::date as WARRANTY_ENDS,(created_at + (warranty * itvalue))::date - current_date as days
    FROM TABLE;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读