首页 > 解决方案 > 如何使用两个/组合参数 1 日期和 1 时间与条件设置数据集参数

问题描述

这是我当前的查询:

where cast(dateadd(h,cast(substring(case when timezoneoffset = 'Z' then '0' else timezoneoffset end,1,3) as int),cast(transactionendtime::timestamp as timestamp without time zone)) as date) >= ?
and cast(dateadd(h,cast(substring(case when timezoneoffset = 'Z' then '0' else timezoneoffset end,1,3) as int),cast(transactionendtime::timestamp as timestamp without time zone)) as date) <= ?

以下是我的数据集中的参数: 在此处输入图像描述

rp_startdaterp_enddate数据类型是Date,是必需的参数
,而rp_startTimerp_endTime时间值是 24 小时,每小时间隔,这些也不是必需的参数
在此处输入图像描述 在此处输入图像描述

现在我想要的是当用户没有选择starttime endtime(空值)然后我的查询保持不变,只读取开始和结束日期,但是当用户选择starttime endtime时,我想查询它有一个条件将startDate 和 endTime & endDate 和 endTime结合为DateTime,然后在我的查询传递中使用这两个进行查询

查询的附加信息:
开始和结束时间= 空值 | 使用当前查询
相同日期开始时间= 空值 | 使用当前查询
相同日期结束时间= 空值 | 使用当前查询
相同的日期开始和结束时间= 非空 | 更改查询以包括时间
不同的日期开始和结束时间= 任何值 | 使用当前查询

标签: sqleclipseamazon-redshiftbirt

解决方案


您应该通过将两个输入都转换为时间戳来处理此问题,但在用户未输入时间时使用 NVL() 来处理:

伪代码:

WHERE cast(dateadd(h,cast(substring(case when timezoneoffset = 'Z' then '0' else timezoneoffset end,1,3) as int),cast(transactionendtime::timestamp as timestamp without time zone)) as date) BETWEEN (date(?) || ' ' || NVL(?, '00:00:00'))::TIMESTAMP AND (date(?) || ' ' || NVL(?, '23:59:59'))::TIMESTAMP

推荐阅读