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;--结果星期二