以下是一些其他的字符函数:
CHR 和 ASCLL 可以相互转换
SQL> select ascii('a') from dual;
ASCII('A')
----------
97
SQL> select chr(97) from dual;
C
-
A
LPAD 和 RPAD
SQL> select lpad('abcd',10,'x') from dual;
LPAD('ABCD
----------
xxxxxxabcd
--lpad就是把用任意字符,从左边增加满任意值。
--rpad就是从右面。
TRIM
LENGTH
DECODE(在2.2视频中讲解)
--日期和时间函数
--ADD_MONTHS 某一天之后多少月之后的日期(注意只有月差没有日差,年差)
SQL> select sysdate from dual;
SYSDATE
--------------
04-1月 -24
SQL> select add_months(sysdate,5) from dual;
ADD_MONTHS(SYS
--------------
04-6月 -24
--(现在5个月之后的那一天)
--MONTHS_BETWEEN
SQL> select months_between(sysdate,to_date('20090605','yyyymmdd')) from dual;
MONTHS_BETWEEN(SYSDATE,TO_DATE('20090605','YYYYMMDD'))
------------------------------------------------------
174.968099
--(有整有零是差多少天没到174个月,他把天数转化成月数)
SQL> select months_between(sysdate,to_date('20140104','yyyymmdd')) from dual;
MONTHS_BETWEEN(SYSDATE,TO_DATE('20140104','YYYYMMDD'))
------------------------------------------------------
120
--(这个就是整数)
--oracle提取年(从当前时间提取年)
SQL> select extract(year from sysdate) from dual;
EXTRACT(YEARFROMSYSDATE)
------------------------
2024
--oracle提取月(从当前时间提取月)
SQL> select extract(month from sysdate) from dual;
EXTRACT(MONTHFROMSYSDATE)
-------------------------
1
----oracle提取天(从当前时间提取天)
SQL> select extract(day from sysdate) from dual;
EXTRACT(DAYFROMSYSDATE)
-----------------------
4
--LAST_DAY(提取当前月的最后一天)
SQL> select last_day(sysdate) from dual;
LAST_DAY(SYSDA
--------------
31-1月 -24
--加purge永久删除student表
SQL> drop table student purge;
--建立一个student表
SQL> create table student(sno number(6),birthday date,sname varchar2(10));
表已创建。
SQL> insert into student values(1,'11-1月-81','张三');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from student;
SNO BIRTHDAY SNAME
---------- -------------- ----------
1 11-1月 -81 张三
SQL> insert into student values(2,'10-3月-82','李四');
已创建 1 行。
SQL> commit;
提交完成。
SQL> insert into student values(3,'06-1月-83','王五');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from student;
SNO BIRTHDAY SNAME
---------- -------------- ----------
1 11-1月 -81 张三
2 10-3月 -82 李四
3 06-1月 -83 王五
--获得学生生日一年之后的日期
SQL> select sno,add_months(birthday,12) from student;
SNO ADD_MONTHS(BIR
---------- --------------
1 11-1月 -82
2 10-3月 -83
3 06-1月 -84
--得到所有年龄大于27岁学生的信息(1、可以把所有生日往后推27年,只要比现在的时间小说明大于27岁。)
SQL> select * from student where add_months(birthday,27*12) <sysdate;
SNO BIRTHDAY SNAME
---------- -------------- ----------
1 11-1月 -81 张三
2 10-3月 -82 李四
3 06-1月 -83 王五
--求每个学生从出生那一天开始到现在一共有多少天。(直接相减,floor函数直接把小数点后面省略掉,保留整数)
SQL> select sysdate-birthday from student;
SYSDATE-BIRTHDAY
----------------
15698.0321
15275.0321
14973.0321
SQL> select floor(sysdate-birthday) from student;
FLOOR(SYSDATE-BIRTHDAY)
-----------------------
15698
15275
14973
--查出生日期是当月的倒数第20天(可以得到张三)
SQL> select * from student where last_day(birthday)-20=birthday;
SNO BIRTHDAY SNAME
---------- -------------- ----------
1 11-1月 -81 张三