Oracle学习(三):单行函数(一)

2014-11-24 15:10:24 · 作者: · 浏览: 4

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