1.知识点:可以对照下面的录屏进行阅读
SQL> --字符函数
SQL> --字符串的转换
SQL> select lower('hellO WORld') 转小写,upper('hellO WORld') 转大写,initcap('hello world') 首字母大写
2 from dual;
SQL> --substr(a,b) 从a中,第b位开始取,取右边所有的字符
SQL> select substr('Hello World',4) from dual;
SQL> --substr(a,b,c) 从a中,第b位开始取,取c位
SQL> select substr('Hello World',4,4) from dual;
SQL> --length 字符数 lengthb 字节数
SQL> select length('Hello World') 字符数, lengthb('Hello World') 字节数
2 from dual;
SQL> --instr 在母串中查找子串,找到返回下标(从1开始),否则返回0
SQL> select instr('Hello World','ll') from dual;
SQL> --lpad 左填充 rpad 右填充
SQL> select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 --向’abcd’字符串的左/右填充’*’,填充到整个字符串的长度为10
2 from dual;
SQL> --trim 去掉前后指定的字符
SQL> select trim('H' from 'Hello WorldH') from dual; --去掉 'Hello WorldH'中所有的’H’
SQL> --replace 替换指定位置的字符
SQL> select replace('Hello World','l','*') from dual; --将'Hello World'中的’l’替换为’*’
SQL> --数字函数
SQL> --四舍五入,第一个参数为要进行四舍五入的数,第二个参数为保留的位数,大于0的为小数点后,小于0的为小数点前的
SQL> select ROUND(45.926, 2) 一,ROUND(45.926, 1) 二, ROUND(45.926, 0) 三,
2 ROUND(45.926, -1) 四, ROUND(45.926, -2) 五
3 from dual;
SQL> --截断,第一个参数为要进行截断的数,第二个参数为保留的位数,大于0的为小数点后,小于0的为小数点前的
SQL> select TRUNC(45.926, 2) 一,TRUNC(45.926, 1) 二, TRUNC(45.926, 0) 三,
2 TRUNC(45.926, -1) 四, TRUNC(45.926, -2) 五
3 from dual
SQL> --日期函数
SQL> --查询当前日期
SQL> select sysdate from dual;
SQL> --查询当前时间,具体到时分秒
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
SQL> --systimestamp时间戳,更精确
SQL> select systimestamp from dual;
SQL> --昨天 今天 明天
SQL> select (sysdate-1) 昨天, sysdate 今天, (sysdate+1) 明天 from dual;
SQL>
--员工的工龄,
SQL> select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
2 (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
3 from emp;
SQL> --日期不能进行相加
SQL> select hiredate+sysdate from emp;
select hiredate+sysdate from emp
*
第 1 行出现错误:
ORA-00975: 不允许日期 + 日期
SQL> --last_day:本月的最后一天
SQL> select last_day(sysdate) from dual;
SQL> --MONTHS_BETWEEN :计算两个时间之间相差的月份
SQL> select (sysdate-hiredate)/30 一,MONTHS_BETWEEN(sysdate,hiredate) 二 --计算工龄(粗略计算和精确计算)
2 from emp;
SQL> --add_months:指定时间加上指定月份
SQL> select add_months(sysdate,114) from dual; --查询当前时间加上114个月份后的时间
SQL> --next_day:指定日期的下一个日期
SQL> select next_day(sysdate,'星期二') from dual; --从今天开始算,下一个星期二
SQL> --对日期进行四舍五入
SQL> select round(sysdate,'month') 一,round(sysdate,'year') 二 from dual; --按月,年进行四舍五入
SQL> --隐式转换的前提: 被转换对象是可以转换的
SQL> --varchar2 or char ->number ; varchar2 or char ->date ; number -> varchar2 ; date ->varchar2 ;
SQL> --显式转换
SQL> --number to_char character ; character to_number number ; date to_char character ; char to_date date ;
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual; --将date转为char
SQL> --to_char函数中经常使用的格式:9 数字;0 零;$ 美元符;L 本地货币;. 小数点;, 千位符;
SQL> --查询员工的薪水: 货币符号,两位小数,千位符
SQL> select sal, to_char(sal,'L9,999.99') from emp;
SQL> --通用函数
SQL> --nvl2(a,b,c) 当a=null时,返回c,否则返回b
SQL> select sal*12+nvl2(comm,comm,0) from emp;
SQL> --nullif(a,b) 当a=b时,返回null,否则返回a
SQL> select nullif('abc','abc') from dual;
SQL> --COALESCE 从左至右找到第一个不为null的值,如果全为空,则返回空
SQL> select comm,sal,COALESCE(comm,sal) from emp;
SQL> --case语句:
SQL> --根据职位涨工资 总裁1000 经理800 其他400
SQL> select ename,job,sal 涨前薪水, case job when 'PRESI