sql 大于等于生效时间并且失效时间不为空的话小于等于失效时间

我纯洁全身都纯洁 2013-12-16 10:12:25
我现在有一张表 有生效时间和失效时间字段
我要查询的条件是时间大于等于生效时间并且失效时间不为空的话小于等于失效时间
主要是“并且失效时间不为空的话小于等于失效时间”这点怎么做
...全文
3167 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yole 2013-12-16
  • 打赏
  • 举报
回复
引用 9 楼 hjgzj 的回复:
[quote=引用 7 楼 lu010610 的回复:] 你用union all 好了 还快点
想了一会儿 发现方法有很多 不过union all 写起来太长了 还是用decode解决了 不过说起来decode到底有多慢呢[/quote] 看数据量啦~~慢的话就再想别的办法喽!
  • 打赏
  • 举报
回复
引用 7 楼 lu010610 的回复:
你用union all 好了 还快点
想了一会儿 发现方法有很多 不过union all 写起来太长了 还是用decode解决了 不过说起来decode到底有多慢呢
  • 打赏
  • 举报
回复
引用 6 楼 u010192842 的回复:
[quote=引用 5 楼 hjgzj 的回复:] [quote=引用 2 楼 u010192842 的回复:] [quote=引用 楼主 hjgzj 的回复:] 我现在有一张表 有生效时间和失效时间字段 我要查询的条件是时间大于等于生效时间并且失效时间不为空的话小于等于失效时间 主要是“并且失效时间不为空的话小于等于失效时间”这点怎么做

select * from 表 

where  getdate() between '生效时间' and isnull('失效时间','--@@@--')----@@@--要是空的需要看到,这里就写'9999-99-99',否则'0000-00-00'


[/quote] oracle 好像没 isnull 用decode判断吗[/quote] [/quote] 受你启发 搞定 AND SYSDATE >= A.EFF_DATE AND SYSDATE <= DECODE(A.EXP_DATE,NULL,TO_DATE('9999-01-01','YYYY-MM-DD HH24:MI:SS'),A.EXP_DATE)
_拙计 2013-12-16
  • 打赏
  • 举报
回复
你用union all 好了 还快点
Yole 2013-12-16
  • 打赏
  • 举报
回复
引用 5 楼 hjgzj 的回复:
[quote=引用 2 楼 u010192842 的回复:] [quote=引用 楼主 hjgzj 的回复:] 我现在有一张表 有生效时间和失效时间字段 我要查询的条件是时间大于等于生效时间并且失效时间不为空的话小于等于失效时间 主要是“并且失效时间不为空的话小于等于失效时间”这点怎么做

select * from 表 

where  getdate() between '生效时间' and isnull('失效时间','--@@@--')----@@@--要是空的需要看到,这里就写'9999-99-99',否则'0000-00-00'


[/quote] oracle 好像没 isnull 用decode判断吗[/quote]
  • 打赏
  • 举报
回复
引用 2 楼 u010192842 的回复:
[quote=引用 楼主 hjgzj 的回复:] 我现在有一张表 有生效时间和失效时间字段 我要查询的条件是时间大于等于生效时间并且失效时间不为空的话小于等于失效时间 主要是“并且失效时间不为空的话小于等于失效时间”这点怎么做

select * from 表 

where  getdate() between '生效时间' and isnull('失效时间','--@@@--')----@@@--要是空的需要看到,这里就写'9999-99-99',否则'0000-00-00'


[/quote] oracle 好像没 isnull 用decode判断吗
  • 打赏
  • 举报
回复

select * from table
where sysdate >= start_time
and ((sysdate <= end_time and end_time is not null) or end_time is null)

--start_time生效时间 end_time失效时间
  • 打赏
  • 举报
回复
引用 1 楼 u010192842 的回复:
[quote=引用 楼主 hjgzj 的回复:] 我现在有一张表 有生效时间和失效时间字段 我要查询的条件是时间大于等于生效时间并且失效时间不为空的话小于等于失效时间 主要是“并且失效时间不为空的话小于等于失效时间”这点怎么做
空的话怎么处理?[/quote] 空的话值查询生效时间 我感觉是不是要分两部分查询然后用union连接 先把失效时间为空的查询来 然后再给外面加一个生效时间的条件 然后把生效时间和失效时间都不为空的查询出来 再给外面加上大于等于生效时间小于等于失效时间 然后连接 不知道对不对
Yole 2013-12-16
  • 打赏
  • 举报
回复
引用 楼主 hjgzj 的回复:
我现在有一张表 有生效时间和失效时间字段 我要查询的条件是时间大于等于生效时间并且失效时间不为空的话小于等于失效时间 主要是“并且失效时间不为空的话小于等于失效时间”这点怎么做

select * from 表 

where  getdate() between '生效时间' and isnull('失效时间','--@@@--')----@@@--要是空的需要看到,这里就写'9999-99-99',否则'0000-00-00'


Yole 2013-12-16
  • 打赏
  • 举报
回复
引用 楼主 hjgzj 的回复:
我现在有一张表 有生效时间和失效时间字段 我要查询的条件是时间大于等于生效时间并且失效时间不为空的话小于等于失效时间 主要是“并且失效时间不为空的话小于等于失效时间”这点怎么做
空的话怎么处理?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧