日期常见函数(补)
next_day函数
- 语法:next_day(date, c) 返回date日期的下一个周几/星期几,周几是由参数c决定的。
- 说明:月 03 02 3月 2月
日/天 1 2 3 星期一 星期二
中文环境下,c的取值可以’星期一’-‘星期天’
英文环境下,c的取值WEDNESDAY
为了不免麻烦,c的取值用数值1-7 表示周日-周六
select sysdate, next_day(sysdate,4) from dual;
extract函数
- 语法:extract(date from datetime) 从参数datetime中提取出参数date指定的数据,比如提取年,月,日
参数date的取值:year年 month月 day日 hour时 minute分 second秒
select extract(year from systimestamp) from dual;
select extract(month from systimestamp) from dual;
select extract(day from systimestamp) from dual;
select extract(hour from timestamp '2020-03-04 09:05:10')from dual;
select extract(hour from systimestamp) from dual;
select extract(hour from cast(sysdate as timestamp)) from dual;
select extract(minute from systimestamp) from dual;
select extract(second from systimestamp) from dual;
空值操作
1)空值的含义 null
数据库中一个非常重要的概念,null/NULL,空值
有时候表中某些字段的值,数据未知或暂时不存在,都是null
任何数据类型(数值类型、日期类型、字符串类型)均可以取值为空null。
2)插入空值
表test --> id列 name列 age列
- (1)显式插入null值
insert into test(id, name, age) values(1, ‘zs’, null); - (2)隐式插入null值
insert into test(id,name) values(2, ’ls’); age列隐式插入null
create table test(
id number(2),
name varchar2(10),
age number(3)
);
insert into test(id, name, age) values(1, 'zs', 20);
insert into test(id, name, age) values(2, 'ls', null);
insert into test(id, name) values(3, 'ww');
3)更新null值
注意更新null值时,此列必须没有非空约束才可以更新。
update test set age=null where id=1;
update test set name=null where id=2;
4)null值条件查询
select * from test where name is null;
强调:查询条件中判断列是否等于null值,使用is,而不是用=
5)非空约束 not null
非空约束是确保字段的值不能为空
create table test(
id number(2),
name varchar2(10) not null
);
name列加上了非空约束,该name列不允许插入null值,不允许修改为null了。
6)空值相关的函数
- (1)nvl函数
语法:nvl(e1,e2) 将null转为非null值
–如果e1为null,则取值e2,e2为实际值
–e1和e2可以是任何数据类型,但两个参数的数据类型必须是一致的。
计算员工的收入=底薪sal+提成comm
select ename, sal, comm, sal+comm from emp;
select ename, sal, comm, sal+nvl(comm, 0) from emp;
- (2)nvl2函数
语法:nvl2(e1, e2, e3) 和nvl函数功能类似,都是将null转为非null值。
nvl2用来判断e1是否为null,如果不是null,用e2的值;
如果是null,用e3的值
select ename,sal,comm,sal+nvl2(comm,comm,0) from emp;
select ename,sal,comm,nvl2(comm,comm+sal,0+sal) from emp;
select ename,sal,comm,nvl2(comm,comm+sal,sal) from emp;