Oracle日期比较:2015/6/3 19:18:29 DATE类型 与 20161128095601 VARCHAR2(16)类型

来源:互联网 发布:淘宝新建员工 编辑:程序博客网 时间:2024/04/28 17:47
情景1:求新注册的用户id,表1中第一次登陆日期大于表2中领取奖品日期-30天的则为新用户。
两个表中日期格式如下
表1中第一次登陆日期格式   2015/6/3 19:18:29   DATE类型,
表2中领取奖励日期格式     20161128095601   VARCHAR2(16)类型
方法一:
SELECT a.id
  FROM table1 a, table2 b
 WHERE a.id = b.id
   AND a.date >
       (TO_DATE((SUBSTR(b.date, 1, 4) || '/' || SUBSTR(b.date, 5, 2) || '/' ||
                SUBSTR(b.date, 7, 2) || ' ' || SUBSTR(b.date, 9, 2) || ':' ||
                SUBSTR(b.date, 11, 2) || ':' || SUBSTR(b.date, 11, 2)),
                'yyyy/MM/dd hh24:mi:ss') - 30);
注:编写中遇到错误
ORA-01810格式代码出现两次
发现对于24小时制,HH支持的不好,又改成一下格式:
HH24指 24小时制  HH 是12小时制   MI只能写为MI 不能写MM  MM 是错的;

ORA-01797: 此运算符后面必须跟 ANY 或 ALL 

写的时候to_date函数没加,我的括号写错位置;


情景2:查询语句报错ORA-01861: 文字与格式字符串不匹配
表1
ID类型VARCHAR2(32)   END_DATE类型DATE   NAME类型VARCHAR2(64)
1                                            2016/8/7                             黎明
2                                            2015/10/13                         流星

SELECT T.* FROM TABLE1 T WHERE TO_DATE(T.END_DATE, 'yyyy-mm-dd') >= TO_DATE(sysdate, 'yyyy-mm-dd');
--ORA-01861: 文字与格式字符串不匹配
修改查询语句:
SELECT T.* FROM TABLE1 T WHERE TO_DATE((TO_CHAR(T.END_DATE, 'yyyy-mm-dd')), 'yyyy-mm-dd') >= TO_DATE((TO_CHAR(sysdate, 'yyyy-mm-dd')), 'yyyy-mm-dd');

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充;转载请注明出处!

1 0
原创粉丝点击