to_date()与to_char()比较

2018-03-21  本文已影响648人  baobaodz

先看一下to_date()
日期到字符

select sysdate,to_date('2018-3-20','yyyy-mm-dd') from dual;
select sysdate,to_date('2018-3-20','yyyy.mm.dd') from dual;
select sysdate,to_date('2018-3-20','yyyy/mm/dd') from dual;
select sysdate,to_date('2018-3-20','yyyy-mm-dd hh24:mi:ss') from dual;
select sysdate,to_date('2018.3.20','yyyy-mm-dd') from dual;
select sysdate,to_date('2018/3/20','yyyy-mm-dd') from dual;
select sysdate,to_date('20180320','yyyy-mm-dd') from dual;

这几个语句输出结果都是


to_date

观察发现,无论是日期是什么格式,还是’yyyy-dd-mm’是什么格式,其结果都和系统日期格式保持一致。得到的时间为2018/3/21 00:00:00

验证一下,看看时分秒格式,结果还是和系统时间格式一致。

select sysdate,
to_date(‘2018-3-21 10 17 14’,’yyyy-mm-dd hh24:mi:ss’) from dual;

输出结果:2018/3/21/周三22:17:14

2.to_char()

将时间日期按照指定的格式输出,得到的是字符串,而非date类型。

select sysdate,to_char(sysdate,'yyyy-mm-dd')from dual;  
select sysdate,to_char(sysdate,'yyyy/mm/dd')from dual;  
select sysdate,to_char(sysdate,'yyyymmdd')from dual;  
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;  

输出结果

2018/3/21/周三 10:19:25  2018-03-21
2018/3/21/周三 10:19:25 2018/03/21
2018/3/21/周三 10:19:25 20180321
2018/3/21/周三 10:19:25 2018-03-21 10:22:57 `
用to_char()可以得到日期中的年、月、日、时、分
select sysdate,to_char(sysdate,'yyyy')from dual;  
select sysdate,to_char(sysdate,'mm')from dual;  
select sysdate,to_char(sysdate,'hh24')from dual;  
select sysdate,to_char(sysdate,'mi')from dual;  

输出结果是

2018/3/21/周三 10:25:57 2018
2018/3/21/周三 10:25:57 03
2018/3/21/周三 10:25:57 10
2018/3/21/周三 10:25:57 25

另外to_char可以截取年份,计算年龄等
查询Student表中每个学生的姓名和年龄。

SELECT SNAME,
EXTRACT (YEAR FROM SYSDATE)- EXTRACT (YEAR FROM S.SBIRTHDAY) AGE 
FROM STUDENT S;--取出当前时间的年份-出生日期的年份即年龄AGE
SELECT SNAME,
TO_CHAR(SYSDATE,'YYYY') - TO_CHAR(SBIRTHDAY,'YYYY') AGE 
FROM STUDENT;
结果

查询当前日期和给定日期是星期几

select to_char(sysdate,'day') from dual;--结果为星期三
select to_char(to_date('2018-3-20','yyyy/mm/dd'),'day') 
from dual;--结果星期二
上一篇下一篇

猜你喜欢

热点阅读