从数据库获取派生列| SQL查询| DB2 SystemDate

时间:2017-01-26 08:06:48

标签: sql db2

我的表格为PRODUCTINFO

Column name : product_name | launch_date
Sample Date : product1       2017-01-20

我需要一个SQL查询来判断产品是否是新推出的。

业务规则:

if (launch_date - currentdate < 0 && currentdate - launch_date < 90) 
    newly_launched = 'YES'
else 
    newly_launched = 'NO'

其中currentdate是今天的日期。

我想要的SQL查询就像:

SELECT launch_date, X as newly_launched 
FROM PRODUCTINFO 
WHERE product_name = 'product1'

我无法弄清楚&#39; X&#39;在我查询所需的结果。

我面临的问题是在我的查询中使用currentdate和if else阻止

请帮忙。

使用以下查询在DB2中获取currentdate的一种方法:

SELECT VARCHAR_FORMAT(CURRENT TIMESTAMP, 'YYYYMMDD')
FROM SYSIBM.SYSDUMMY1

仍然不确定如何在我的if else场景中使用它。

回答here不能解决我的问题,因为这种情况是基于if的。

2 个答案:

答案 0 :(得分:1)

使用TIMESTAMPDIFF,其中16为第一个参数,用于2个时间戳之间的计数天数,详细信息请参见here

试试这个

select launch_date, 
case when TIMESTAMPDIFF( 16, cast(cast(launch_date as timestamp) - current timestamp as char(22))) >0 and 
 TIMESTAMPDIFF( 16, cast(cast(launch_date as timestamp) - current timestamp as char(22))) <90 then 'YES' else 'NO' end newly 
from PRODUCTINFO
WHERE product_name = 'product1'

答案 1 :(得分:-1)

只需在case语法中使用datediff函数,我希望它可以提供帮助!

SELECT launch_date,
        case
            when DATEDIFF(day,launch_date,getdate()) BETWEEN 0 AND 90 then 'YES'
            else 'NO'
            end AS newly_launched
FROM PRODUCTINFO
WHERE product_name = 'product1'

如果您想要为所有记录执行此操作:

SELECT launch_date,
        case
            when DATEDIFF(day,launch_date,getdate()) BETWEEN 0 AND 90 then 'YES'
            else 'NO'
            end AS newly_launched
FROM PRODUCTINFO