ORACLE SQL日期处理
开发工具与关键技术:Oracle sql*plus 与 PLSQL Developer
作者:蒋紫晨
撰写时间:2019年04月07日
时间日期函数
1.查询时间格式(sql语句)
1.to_date函数
2.to_date的格式:to_date(‘要转换的时间’,’转换成的时间格式’), 两个参数的格式必须匹配,不然会报错。
3.to_char(日期,”转换格式” ) 即把给定的日期按照“转换格式”转换。
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
2.查询日期之间的数据 例如查询employees表中出生日期(hire_date)在’'1986-01-01’ 和’ '1988-01-01’之间的数据:
Select * from employees where hire_date between '1986-01-01' and '1988-01-01';
3.如果对于日期范围不规则的数据需要先转格式,如下
Select * from employees where to_date(hire_date,'YYYY-MM-DD')between
to_date('1986-01-01','YYYY-MM-DD') and to_date('1988-01-01','YYYY-MM-DD');
4.TO_CHAR函数对数字的转换,格式如下:
符号 | 名称 |
---|---|
9 | 数字 |
0 | 零 |
$ | 美元符 |
L | 人民币(¥) |
. | 小数点 |
, | 千位符 |
SELECT TO_CHAR(salary, '$99,999.00') SALARY FROM employees
WHERE last_name = 'Ernst';
5.last_day(d)关键字 获取包含d的月最后一天的日期
select last_day(sysdate) from dual;
结果:-- 获取本月最后一天: 2014/5/31 22:46:01
- add_months(d, n) 日期d往后推n个月
select add_months(sysdate,2) from dual;
结果:-- 日期往后推2个月: 2014/7/20 22:49:36
- next_day(d, day)
select next_day(sysdate,2) from dual;
-- 日期sysdate之后的第一周中, 指定星期的第2天是什么日期
- months_between(f,s) 日期f和s间相差月数
select months_between(sysdate,to_date('2007-04-12','yyyy-mm-dd'))from dual;
结果:-- 85.2889874551971
9.获取两个日期间的天数
select floor(sysdate - to_date('20140405','yyyymmdd')) from dual;
10.cast函数
转换日期格式
Select cast('20190327'as date) from dual;
转换数字格式
Select cast('020190327'as number) from dual;
11.只能是系统时间使用day或者是数据库中的列中的日期都能使用
Select to_char(sysdate, 'day') from dual;
获取sysdate年份或者是数据库中的列中的日期都能使用
Select to_char(sysdate, 'yyyy') from dual
12.INSERT …INTO… 时间的处理
INSERT INTO 表名(id,name,hire_date)
Values(100,'用户壹',TO_DATE('21-6月-1989','dd-MON-yyyy'))
转换成格式保存进数据库中。
例子: 查询出与当月的员工入职日期的月份相同的人数有多少人数?
Select last_name to_char(sysdate,’mon’),hire_date
from employees
Where to_char (sysdate,’mon’)= to_char(hire_date,’mon’);
17.提示:日期是不能用加法的
例子: select to_date(sysdate+to_date(2019-03-27,‘yyyy-mm-dd’))from dual;