oracle-日期类型

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') &gt;= to_date('${beginYear}','yyyy-mm')
</if>
<if test=" endYear!= null and endYear !='' ">
	and to_date(substr(RECORD_DATE,1,7),'yyyy-mm') &lt;= to_date('${endYear}','yyyy-mm')
</if>
-- 第二种
<if test=" beginYear != null and beginYear !='' ">
	and to_date(RECORD_DATE,'yyyy-mm') &gt;= to_date('${beginYear}','yyyy-mm')
</if>
<if test=" endYear!= null and endYear !='' ">
	and to_date(RECORD_DATE,'yyyy-mm') &lt;= to_date('${endYear}','yyyy-mm')
</if>
-- 第三种
<if test=" beginYear != null and beginYear !='' ">
	and RECORD_DATE &gt;= to_date('${beginYear}','yyyy-mm')
</if>
<if test=" endYear!= null and endYear !='' ">
	and RECORD_DATE &lt;= 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)
		&gt;= 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)
		&gt;= 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}

猜你喜欢

转载自blog.csdn.net/GodPluto/article/details/114373134