Oracle字段是时间戳类型
to_timestamp('2012-07-28 00:00:0.000000000','yyyy-mm-dd hh24:mi:ss.ff9')
时间戳格式化
SELECT TO_CHAR(时间戳的那一列 / (1000 * 60 * 60 * 24)
+ TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') AS CDATE
FROM 表名 ;
Oracle group by 显示其他字段
select
oid,
back1,back2,
row_number() over(partition by back1 order by oid desc) rw
from TEST1
时间比较(TIMESTAMP)
-- 1. 都变为字符串比较
where to_char(birthdate,'yyyy-mm-dd') >= '2000-10-5'
-- 2. 都变为日期格式比较
where birthdate >= to_date('2000-10-5','yyyy-mm-dd')
-- 3. 第三种
where to_date(RECORD_DATE,'yyyy-mm') = to_date('2000-10','yyyy-mm')
-- 4. 错误方式
where birthdate >= '2000-10-5'
报错: 输入时间太长
结论:时间太长,如果是一个比较不会出错,多个比较需要给输入时间字符串加上单引号
-- 第一种
<if test=" beginYear != null and beginYear !='' ">
and to_date(substr(RECORD_DATE,1,7),'yyyy-mm') >= to_date('${beginYear}','yyyy-mm')
</if>
<if test=" endYear!= null and endYear !='' ">
and to_date(substr(RECORD_DATE,1,7),'yyyy-mm') <= to_date('${endYear}','yyyy-mm')
</if>
-- 第二种
<if test=" beginYear != null and beginYear !='' ">
and to_date(RECORD_DATE,'yyyy-mm') >= to_date('${beginYear}','yyyy-mm')
</if>
<if test=" endYear!= null and endYear !='' ">
and to_date(RECORD_DATE,'yyyy-mm') <= to_date('${endYear}','yyyy-mm')
</if>
-- 第三种
<if test=" beginYear != null and beginYear !='' ">
and RECORD_DATE >= to_date('${beginYear}','yyyy-mm')
</if>
<if test=" endYear!= null and endYear !='' ">
and RECORD_DATE <= to_date('${endYear}','yyyy-mm')
</if>
时间比较
-- 正确语句
select to_date('2012-05-06 12:05:03','yyyy-mm-dd hh24:mi:ss') from dual
select to_date('2012-05-06','yyyy-mm-dd hh24:mi:ss') from dual
select to_date('2012-05-06','yyyy-mm-dd') from dual
-- 报错语句
select to_date('2012-05-06 12:05:03','yyyy-mm-dd') from dual
在预期数值的位置找到了非数字字符
报错
类型
实际值
解决
and to_date(to_char(YEAR,'yyyy-mm'),'yyyy-mm') = to_date('${queryDate}','yyyy-mm')
时间戳类型转成时间
-- 等于
AND TO_CHAR(to_date( '1970/01/01 08:00:00', 'yyyy/mm/dd hh24:mi:ss')+ CREATE_DATE/(1000*60*60*24),'yyyy') = TO_CHAR(SYSDATE,'YYYY')
-- 大于等于
AND to_date( '1970/01/01 08:00:00', 'yyyy/mm/dd hh24:mi:ss') + CREATE_DATE/(1000*60*60*24)
>= to_date( '1970/01/01 08:00:00', 'yyyy/mm/dd hh24:mi:ss') + ${beginTime}/(1000*60*60*24)
时间类型
-- 等于
AND TO_CHAR(create_time,'YYYY')= TO_CHAR(SYSDATE,'YYYY')
-- 大于等于
AND to_date( '1970/01/01 08:00:00', 'yyyy/mm/dd hh24:mi:ss') + CREATE_DATE/(1000*60*60*24)
>= to_date( '1970/01/01 08:00:00', 'yyyy/mm/dd hh24:mi:ss') + ${beginTime}/(1000*60*60*24)
大于等于
--本年 and TO_CHAR(create_date,'YYYY')=TO_CHAR(SYSDATE,'YYYY')
--本月 and TO_CHAR(create_date,'YYYY-MM')=TO_CHAR(SYSDATE,'YYYY-MM')
--本日 and TO_CHAR(create_date,'YYYY-MM-DD')=TO_CHAR(SYSDATE,'YYYY-MM-DD')
--自定义 and create_date >= #{startDate} and create_date <= #{endDate}