oracle_查询日期是否过期(大于等于某日期)

今天开发CRM的一个小功能,需求大概是这样的:有一张存储客户信息的表,这个表中有一个列代表着该用户的“提醒时间”,它意为:如果当前时间大于等于这个值,那么该用户就需要在展示的时候被标记为“需要提醒”,并且需要展示需要提醒的条数。

其实这个问题不应该是个大问题,只不过本人oracle比较薄弱,需要进行记录,以便后查。
经过调查,我发现了如下几个函数对于实现本需求有帮助::

1:符号判断函数 sign

函数语法:
sign(n)

函数说明:
取数字n的符号,大于0返回1,小于0返回-1,等于0返回0

示例:
一、select sign( 100 ),sign(- 100 ),sign( 0 ) from dual;

  SIGN(100) SIGN(-100) SIGN(0)
  ———- ———- ———-
  1 -1  0

二、a=10,b=20 
  则sign(a-b)返回-1

2:值比较函数 decode
函数说明:
根据条件返回相应值
示例:
  decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)  
  该函数的含义如下:  
  IF 条件=值1 THEN
  RETURN(翻译值1)
  ELSIF 条件=值2 THEN
  RETURN(翻译值2)
  ......
  ELSIF 条件=值n THEN
  RETURN(翻译值n)  
  ELSE
  RETURN(缺省值)
  END IF
或:
  when case 条件=值1 THEN
  RETURN(翻译值1)
  ElseCase 条件=值2 THEN
  RETURN(翻译值2)
  ......
  ElseCase 条件=值n THEN
  RETURN(翻译值n)  
  ELSE
  RETURN(缺省值)
  END
感觉这两个函数就足够了,那么现在理清楚写sql的思路:
比较每条记录的“提醒时间”,过期或者到期就意味着需要设置提醒。
1:先比较两个时间
表:crm_lwh_custinfo
字段:remind_date(Date)

1 sign(to_date(t.remind_date,'yyyy.mm.dd')-to_date(sysdate,'yyyy.mm.dd'))

根据sign函数的返回值进一步设置sql要返回的值
2:根据sign函数的返回值,通过decode函数设定sql要返回的值
过期或者到期都用1标识,未到期,也就是默认值用0标识

1 select decode(sign(to_date(t.remind_date,'yyyy.mm.dd')-to_date(sysdate,'yyyy.mm.dd')),-1,1,0,1,0
    as need_remind  from crm_lwh_custinfo t 

如果你看到这里觉得有什么更好的办法,或者觉得这种写法有什么不足,欢迎留言。

posted on 2015-03-24 14:35 都较瘦 阅读(5634) 评论(0)  编辑  收藏 所属分类: Oracle相关问题积累


只有注册用户登录后才能发表评论。


网站导航:
 
<2015年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

公告

博客定位:囿于目前的水平,博客定位在记录自己的学习心得和随手的练习

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜