Oracle数值函数,日期函数,转换函数,通用函数(七)

--数值函数 ROUND(n,[m])四舍五入,TRUNC(n,[m])截断函数,MOD()取余函数 函数用法,
select ROUND(25.328) from dual;
select ROUND(25.328,2) from dual;
select ROUND(25.328,-1) from dual;

select TRUNC(25.328) from dual;
select TRUNC(25.328,2) from dual;
select TRUNC(25.328,-1) from dual;

select ROUND(sal/30,2),TRUNC(sal/30,2) from emp;--求员工的日工资

select MOD(9,2) from dual;
select MOD(4,2) from dual;
select * from emp where MOD(empno,2)=0;--求员工号为偶数的员工信息

--日期函数SYSDATE当前日期,MONTHS_BETWEEN返回两个日期之间相差的月数,ADD_MONTHS,NEXT_DAY,LAST_DAY,ROUND(7月1日),TRUNC
select SYSDATE from dual;
select to_char(sysdate,'yyyy-MM-dd') from dual;
select months_between(sysdate,hiredate) from emp;
select round(months_between(sysdate,hiredate)/12) from emp;
select ename,add_months(hiredate,30*12) from emp;--员工入职三十年后的日期
select sysdate,next_day(sysdate,'星期二') from dual;--当前时间对应的下一个星期二的日期
select sysdate,last_day(sysdate) from dual;--当前时间对应的本月最后一天的日期
select empno,ename,hiredate from emp where hiredate = last_day(hiredate);
select *from emp where hiredate = last_day(hiredate);
select round(sysdate,'YEAR') from dual;
select trunc(sysdate,'YEAR') from dual;
SQL> select hiredate,round(hiredate,'YEAR'),round(hiredate,'MONTH') from emp where empno=7654;

HIREDATE    ROUND(HIREDATE,'YEAR') ROUND(HIREDATE,'MONTH')
----------- ---------------------- -----------------------
1981-9-28   1982-1-1               1981-10-1

SQL> select hiredate,trunc(hiredate,'YEAR'),trunc(hiredate,'MONTH') from emp where empno=7654;

HIREDATE    TRUNC(HIREDATE,'YEAR') TRUNC(HIREDATE,'MONTH')
----------- ---------------------- -----------------------
1981-9-28   1981-1-1               1981-9-1

--转换函数TO_DATE,TO_CHAR,TO_NUMBER,oracle中也有部分隐式转换类型,这些函数是显示转换
select * from emp where sal>2000;
select * from emp where sal>'2000';--结果相同
SQL> select to_char(hiredate,'YYYY"年"MM"月"DD"日"') from emp;

TO_CHAR(HIREDATE,'YYYY"年"MM"?
-----------------------------
1980年12月17日
1981年02月20日
1981年02月22日
1981年04月02日
1981年09月28日
1981年05月01日
1981年06月09日
1987年04月19日
1981年11月17日
1981年09月08日
1987年05月23日
1981年12月03日
1981年12月03日
1982年01月23日
14 rows selected
SQL> select to_char(hiredate,'DD-MON-RR','NLS_DATE_LANGUAGE=AMERICAN') from emp;

TO_CHAR(HIREDATE,'DD-MON-RR','
------------------------------
17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
28-SEP-81
01-MAY-81
09-JUN-81
19-APR-87
17-NOV-81
08-SEP-81
23-MAY-87
03-DEC-81
03-DEC-81
23-JAN-82
14 rows selected
select TO_CHAR(123456,'L0,000,000.00') from dual;--本地货币字符前缀,0补齐
select TO_CHAR(123456,'L9,999,999.99') from dual;--不补齐
select TO_CHAR(123456,'$9,999,999.99') from dual;--美元符号前缀
select TO_DATE(20181113,'YYYY_MM_DD') from dual;
select TO_DATE('20181113','YYYY_MM_DD') from dual;
select TO_NUMBER('$2000','$9999') from dual;
select TO_NUMBER('¥2000','L9999') from dual;
--通用函数NVL(expr1,expr2),NVL2(expr1,expr2,expr3),NULLIF(expr1,expr2),COALESCE(expr1,expr2[]),CASE,DECODE(......)
--case expr1 when X then y when x1 then y1 else y2 end
SQL> select ename,sal+NVL(comm,0) from emp;

ENAME      SAL+NVL(COMM,0)
---------- ---------------
SMITH                  800
ALLEN                 1900
WARD                  1750
JONES                 2975
MARTIN                2650
BLAKE                 2850
CLARK                 2450
SCOTT                 3000
KING                  5000
TURNER                1500
ADAMS                 1100
JAMES                  950
FORD                  3000
MILLER                1300
14 rows selected
SQL> select ename,NVL2(comm,sal+comm,sal) from emp;

ENAME      NVL2(COMM,SAL+COMM,SAL)
---------- -----------------------
SMITH                          800
ALLEN                         1900
WARD                          1750
JONES                         2975
MARTIN                        2650
BLAKE                         2850
CLARK                         2450
SCOTT                         3000
KING                          5000
TURNER                        1500
ADAMS                         1100
JAMES                          950
FORD                          3000
MILLER                        1300
14 rows selected
SQL> select ename,hiredate,NULLIF(hiredate,trunc(hiredate,'MONTH')) from emp;

ENAME      HIREDATE    NULLIF(HIREDATE,TRUNC(HIREDATE
---------- ----------- ------------------------------
SMITH      1980-12-17  1980-12-17
ALLEN      1981-2-20   1981-2-20
WARD       1981-2-22   1981-2-22
JONES      1981-4-2    1981-4-2
MARTIN     1981-9-28   1981-9-28
BLAKE      1981-5-1    
CLARK      1981-6-9    1981-6-9
SCOTT      1987-4-19   1987-4-19
KING       1981-11-17  1981-11-17
TURNER     1981-9-8    1981-9-8
ADAMS      1987-5-23   1987-5-23
JAMES      1981-12-3   1981-12-3
FORD       1981-12-3   1981-12-3
MILLER     1982-1-23   1982-1-23
14 rows selected
SQL> select ename,hiredate,sal,COALESCE(sal+comm,sal) from emp;

ENAME      HIREDATE          SAL COALESCE(SAL+COMM,SAL)
---------- ----------- --------- ----------------------
SMITH      1980-12-17     800.00                    800
ALLEN      1981-2-20     1600.00                   1900
WARD       1981-2-22     1250.00                   1750
JONES      1981-4-2      2975.00                   2975
MARTIN     1981-9-28     1250.00                   2650
BLAKE      1981-5-1      2850.00                   2850
CLARK      1981-6-9      2450.00                   2450
SCOTT      1987-4-19     3000.00                   3000
KING       1981-11-17    5000.00                   5000
TURNER     1981-9-8      1500.00                   1500
ADAMS      1987-5-23     1100.00                   1100
JAMES      1981-12-3      950.00                    950
FORD       1981-12-3     3000.00                   3000
MILLER     1982-1-23     1300.00                   1300
14 rows selected
NULLIF函数

  NULLIF(Expression1,Expression2):给定两个参数Expression1和Expression2,如果两个参数相等,则返回NULL;否则就返回第一个参数。

  等价于:Case WHEN Expression1=Expression2 Then NULL ELSE Expression1。

  例如Select NULLIF(1,1)返回NULL,Select NULLIF(1,2)返回1。

  有一个实际的应用,例如防止除0操作的放生,可以使用a/NULLIF(b,0),这样就不怕b是0了,当然除0操作也可以通过别的方式判断。

NULL

  NULL是个神奇的东西,表示空值,未知值,任何数与它加减乘除都返回NULL。

ISNULL函数

  ISNULL(Expression1,Expression2):给定两个参数Expression1和Expression2,如果Expression1是NULL,那么返回Expression2,否则返回Expression1。

  等价于:Case WHEN Expression1 is NULL Then Expression2 ELSE Expression1。

  例如Select ISNULL(NULL,1)返回1,Select ISNULL(1,2)返回1。

  有一个实际的应用,可以对空值进行默认值替代,例如SELECT ISNULL(email,'没有填写email') from table1,所有email为null的,用'没有填写email'来替代。

 COALESCE函数

  COALESCE(Expression1,Expression2,Expression3,......):接受一系列的表达式或列,返回第一个非空的值。

      例如SELECT COALESCE(NULL,NULL,4,NULL,NULL,5),那么返回,如果里面的参数都为NULL,那么会报错。

select iif(30>45,'对','错') as 结果  
/*  
结果  
----  
错  
*/  
select iif(null=null,'对','错') as 结果  
/*  
结果  
----  
错  
*/  
select iif(null is null,'对','错') as 结果  
/*  
结果  
----  
对  
*/

WITH TIES

  与top()和order by 一起用,可以返回多于top的行。防止丢失想要的信息。

  例如:有个表table1

select top(3) * from table1 order by name desc:结果如下:(只有三条)

select top(3) with ties * from table1 order by name desc:结果如下:

 

小插件,SQL Prompt,配合Microsoft SQL Server Management Studio,使用起来非常方便,同时再加上以下几个快捷键:

  (1)ctrl+5或F5,运行代码,如果想运行特定的语句,那么只是选中该语句,然后F5或ctrl+E即可。

  (2)ctrl+L:显示执行计划。

  (3)ctrl+R:显示隐藏下面的结果窗口,增大自己书写sql的空间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值