1、to_char函数
(1)使用场景
在oracle中存储的日期类型为Date.精确到秒钟.
当存储的时间只精确到天时, 用String类型的java字段接收该值,会导致秒分时全部为0
(2)解决方法
使用to_char函数, 可以指定最终想要的日期格式的类型.
类似于java中的SimpleDateFormat.
例如在上面的例子中, 只想要查询出来的结果精确到天.
那么在sql中使用如下:
select
to_char(ENDTIME,'YYYY-MM-DD') ENDTIME
FROM tablename
(3)其他时间格式
在sql中 , yyyy-mm-dd hh24:mi:ss 中的字母, 大小写均可.
查询24小时格式的, 精确到秒的
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;
查询12小时格式
select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss')from dual;
注意: sql中不区分大小写,可能会直觉地采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。如:select to_date(‘2005-01-01 13:14:20’,‘yyyy-MM-dd HH24:mm:ss’) from dual;
取得当前日期是一个星期中的第几天(注意:星期日是第一天)
select sysdate,to_char(sysdate,'D') from dual;
类似:
select to_char(sysdate,'yyyy') from dual; --年
select to_char(sysdate,'Q' from dual; --季
select to_char(sysdate,'mm') from dual; --月
select to_char(sysdate,'dd') from dual; --日
ddd --年中的第几天
WW --年中的第几个星期
W --该月中第几个星期
D --周中的星期几
hh --小时(12)
hh24 --小时(24)
Mi --分
ss --秒
2、to_data函数
与to_char类似
select * from emp
where dates
between
to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss')
and
to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss')
当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。如果输入的日期数据忽略时间部分,Oracle会将时、分、秒部分都置为0,也就是说会取整到日。
同样,忽略了DD参数,Oracle会采用1作为日的默认值,也就是说会取整到月。
但是,不要被这种“惯性”所迷惑,如果忽略MM参数,Oracle并不会取整到年,取整到当前月。