sql - 如何使用两个/组合参数 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_startdate和rp_enddate数据类型是Date,是必需的参数
,而rp_startTime和rp_endTime是时间值是 24 小时,每小时间隔,这些也不是必需的参数
现在我想要的是当用户没有选择starttime 或 endtime(空值)然后我的查询保持不变,只读取开始和结束日期,但是当用户选择starttime 和 endtime时,我想查询它有一个条件将startDate 和 endTime & endDate 和 endTime结合为DateTime,然后在我的查询传递中使用这两个进行查询
查询的附加信息:
开始和结束时间= 空值 | 使用当前查询
相同日期,开始时间= 空值 | 使用当前查询
相同日期,结束时间= 空值 | 使用当前查询
相同的日期、开始和结束时间= 非空 | 更改查询以包括时间
不同的日期、开始和结束时间= 任何值 | 使用当前查询
解决方案
您应该通过将两个输入都转换为时间戳来处理此问题,但在用户未输入时间时使用 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
推荐阅读
- sql - 如何将 varchar 显示为百分比,同时使用同一个变量进行别名和链接多个表?
- vegan - 如何用固定的嵌套因子解释 permanova adonis 输出?
- python-3.x - 如何修复关键错误 - 使用 Fousquare API @ Python 中的“组”?
- javascript - 使用 axios 获取文件(内容和文件名)
- php - 提供 x,y,width 和 height 值,我如何获得从中心缩放的 svg 变换矩阵
- python - 获得组内最大的差异
- angularjs - 将编译参数传递给 ng-click 指令
- java - 如何使用 graphql-java 响应扩展?
- c# - 拆分列表框项目并拆分没有选定项目
- mongodb - MongoError:不能在 $in 下嵌套 $