肥宅兜

导航

单行函数

单行函数

 

 

范例1验证UPPER()大写LOWER()小写函数

SELECT UPPER('LiXingHua'),LOWER('MLDN') FROM dual ;

 

范例2现在查询出雇员姓名是smith”的完整信息,但是由于失误,没有考虑到数据的大小写问题(在一些项目的运行之中经常会出现此类输入数据不考虑大小写的问题),此时可以使用UPPER()函数将全部内容变为大写

SELECT * FROM emp WHERE ename=UPPER('smith') ;

 

范例3查询所有雇员的姓名,要求将每个雇员的姓名以首字母大写INITCAP的形式出现

SELECT ename 原始姓名,INITCAP(ename) 姓名开头首字母大写 FROM emp ;

 

范例4现在要求查询所有雇员的姓名,但是要求将雇员姓名中所有的字母A”替换成字母“_

SELECT ename , REPLACE(ename,'A','_') FROM emp ;

 

范例5查询出姓名长度是5的所有雇员信息

SELECT * FROM emp WHERE LENGTH(ename)=5 ;

 

范例6现在要求查询出雇员姓名前三个字母是JAM”的雇员信息

SELECT *

FROM emp

WHERE SUBSTR(ename,0,3)='JAM' ;

 

范例7查询所有10部门雇员的姓名,但是不显示每个雇员姓名的前三个字母

SELECT ename 原姓名, SUBSTR(ename,3) 截取之后的姓名

FROM emp

WHERE deptno=10 ;

 

范例8要求显示每个雇员姓名及其姓名的后三个字母

SELECT ename,SUBSTR(ename,LENGTH(ename)-2)

FROM emp ;

 

范例9SUBSTR()函数中设置负数截取

SELECT ename,SUBSTR(ename,-3) FROM emp ;

 

范例10下标从0开始

SELECT ename,SUBSTR(ename,0,3) FROM emp ;

范例11下标从1开始

SELECT ename,SUBSTR(ename,1,3) FROM emp ;

 

范例12返回指定字符的ASCII

SELECT ASCII('L') FROM dual ;

 

 

范例13验证CHR()函数,将ASC II码变回字符

SELECT CHR(100) FROM dual ;

 

范例14去掉字符串左边空格 —— LTRIM()

SELECT '   MLDN LiXingHua     ' 原始字符串 ,  LTRIM('   MLDN LiXingHua     ') 去掉左空格 FROM dual ;

 

范例15去掉字符串右边空格 —— RTRIM()

SELECT '   MLDN LiXingHua     ' 原始字符串 ,  RTRIM('   MLDN LiXingHua     ') 去掉右空格 FROM dual ;

 

范例16去掉左右两边空格 —— TRIM()

SELECT '   MLDN LiXingHua     ' 原始字符串 ,  TRIM('   MLDN LiXingHua     ') 去掉左右空格 FROM dual ;

 

范例17字符串左、右填充 —— LPAD()RPAD()

SELECT  LPAD('MLDN' , 10 , '*') LPAD函数使用 , RPAD('MLDN' , 10 , '*') RPAD函数使用 ,

        LPAD(RPAD('MLDN' , 10 , '*') , 16 , '*') 组合使用

FROM dual ;

 

范例18字符串查找 —— INSTR()

SELECT  INSTR('MLDN Java' , 'MLDN') 查找得到 ,

        INSTR('MLDN Java' , 'Java') 查找得到 ,

        INSTR('MLDN Java' , 'JAVA') 查找不到

FROM dual ;

 

 

范例19验证保留小数ROUND()函数的使用

SELECT  ROUND(789.652) 不保留小数,ROUND(789.652,2) 保留两位小数, ROUND(789.652,-1) 处理整数进位

FROM dual ;

 

 

范例20列出每个雇员的一些基本信息和日工资情况

SELECT empno,ename,job,hiredate,sal,ROUND(sal/30,2) 日薪金

FROM emp ;

 

 

范例21验证截取小数TRUNC()函数

SELECT  TRUNC(789.652) 截取小数, TRUNC(789.652,2) 截取两位小数,

        TRUNC(789.652,-2) 取整

FROM dual ;

 

范例22验证MOD函数

SELECT MOD(10,3) FROM DUAL ;

 

范例23取得当前的系统时间

SELECT SYSDATE FROM dual ;

 

范例24修改日期显示格式

ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss' ;

SELECT SYSDATE FROM dual ;

 

 

范例24查询距离今天为止3天之后以及3天之前的日期

SELECT SYSDATE + 3 三天之后的日期 , SYSDATE - 3 三天之前的日期

FROM dual ;

 

范例25查询出每个雇员的到今天为止的雇佣天数、以及十天前每个雇员的雇佣天数。

SELECT  empno 雇员编号 ,ename 雇员姓名 ,

        SYSDATE-hiredate 雇佣天数 , (SYSDATE-10)-hiredate 十天前雇佣天数

FROM emp ;

 

范例26在查询结果之中使用TRUNC()函数TRUNC函数为指定元素而截去的日期值完成功能

SELECT  empno 雇员编号 ,ename 雇员姓名 ,

        TRUNC(SYSDATE-hiredate) 雇佣天数 , TRUNC((SYSDATE-10)-hiredate) 十天前雇佣天数

FROM emp ;

 

 

范例27验证ADD_MONTHS()函数

SELECT SYSDATE,

      ADD_MONTHS(SYSDATE, 3 ) 三个月之后的日期 ,

      ADD_MONTHS(SYSDATE, -3 ) 三个月之前的日期 ,

      ADD_MONTHS(SYSDATE, 60) 六十个月之后的日期

FROM dual ;

 

范例28要求显示所有雇员在被雇佣三个月之后的日期

SELECT empno,ename,job,sal,hiredate,ADD_MONTHS(hiredate,3) FROM emp ;

 

 

范例29验证NEXT_DAY()函数,NEXT_DAY()函数的功能主要是求出下一个指定的日期数,如果说现在的日期是“20120130日 星期一”,那么如果现在要想知道下一个“星期一”或是“星期日”的具体日期,则可以使用NEXT_DAY()函数。

SELECT  SYSDATE,NEXT_DAY(SYSDATE,'星期日') 下一个星期日 ,

        NEXT_DAY(SYSDATE,'星期一') 下一个星期一

FROM dual ;

 

3LAST_DAY()函数

范例5-30验证LAST_DAY()函数,使用LAST_DAY()函数可以求得指定日期所在月的最后一天日期,如果今天的日期是“20120119日”,则使用LAST_DAY()求出来的日期就是“20120131日”

SELECT SYSDATE, LAST_DAY(SYSDATE) FROM dual ;

 

范例1查询所有是在其雇佣所在月的倒数第三天被公司雇佣的完整雇员信息

SELECT empno,ename,job,hiredate,LAST_DAY(hiredate)

FROM emp

WHERE LAST_DAY(hiredate)-2=hiredate ;

 

 

范例2查询出每个雇员的编号、姓名、雇佣日期、雇佣的月数及年份

SELECT empno 雇员编号,ename 雇员姓名,hiredate 雇佣日期 ,

TRUNC(MONTHS_BETWEEN(sysdate,hiredate)) 雇佣总月数,

TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12) 雇佣总年份

FROM emp ;

 

范例33查询出每个雇员的编号、姓名、雇佣日期、已雇佣的年数、月数、天数

SELECT  empno 雇员编号,ename 雇员姓名, hiredate 雇佣日期 ,

TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12) 已雇佣年数

FROM emp ;

SELECT  empno 雇员编号,ename 雇员姓名, hiredate 雇佣日期 ,

TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12) 已雇佣年数 ,

TRUNC(MOD(MONTHS_BETWEEN(sysdate,hiredate),12)) 已雇佣月数

FROM emp ;

SELECT  empno 雇员编号,ename 雇员姓名, hiredate 雇佣日期 ,

TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12) 已雇佣年数 ,

        TRUNC(MOD(MONTHS_BETWEEN(sysdate,hiredate),12)) 已雇佣月数 ,

        TRUNC(sysdate-ADD_MONTHS(hiredate,MONTHS_BETWEEN(sysdate,hiredate))) 已雇佣天数

FROM emp ;

 

范例4从日期时间之中取出年、月、日数据。

SELECT EXTRACT(YEAR FROM DATE '2001-09-19') years ,

EXTRACT(MONTH FROM DATE '2001-09-19') months ,

EXTRACT(DAY FROM DATE '2001-09-19') days

FROM dual ;

 

范例5从时间戳之中取出年、月、日、时、分、秒。

SELECT  EXTRACT(YEAR FROM SYSTIMESTAMP) years ,

EXTRACT(MONTH FROM SYSTIMESTAMP) months ,

EXTRACT(DAY FROM SYSTIMESTAMP) days ,

EXTRACT(HOUR FROM SYSTIMESTAMP) hours ,

EXTRACT(MINUTE FROM SYSTIMESTAMP) minutes ,

EXTRACT(SECOND FROM SYSTIMESTAMP) seconds

FROM dual ;

 

范例6取得时间间隔

SELECT EXTRACT(DAY FROM TO_TIMESTAMP('1982-08-13 12:17:57','yyyy-mm-dd hh24:mi:ss') - TO_TIMESTAMP('1981-09-27 09:08:33','yyyy-mm-dd hh24:mi:ss')) days ,

EXTRACT(HOUR FROM datetime_one - datetime_two) hours ,

EXTRACT(MINUTE FROM datetime_one - datetime_two) minutes ,

EXTRACT(SECOND FROM datetime_one - datetime_two) seconds   

FROM (   

SELECT TO_TIMESTAMP('1982-08-13 12:17:57','yyyy-mm-dd hh24:mi:ss') datetime_one  ,

TO_TIMESTAMP('1981-09-27 09:08:33','yyyy-mm-dd hh24:mi:ss') datetime_two

FROM dual) ;

 

范例7复杂计算时间间隔(天数)

SELECT

    EXTRACT(DAY FROM TO_TIMESTAMP('1982-08-13 12:17:57','yyyy-mm-dd hh24:mi:ss') 

        - TO_TIMESTAMP('1981-09-27 09:08:33','yyyy-mm-dd hh24:mi:ss')) days

FROM dual ;

 

 

 

 

范例4格式化当前的日期时间

SELECT  SYSDATE 当前系统时间 ,TO_CHAR(SYSDATE,'YYYY-MM-DD') 格式化日期 ,

         TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') 格式化日期时间 ,

         TO_CHAR(SYSDATE,'FMYYYY-MM-DD HH24:MI:SS') 去掉前导0的日期时间

FROM dual ;

 

范例5使用其他方法格式化年、月、日

SELECT  SYSDATE 当前系统时间 ,TO_CHAR(SYSDATE,'YEAR-MONTH-DY') 格式化日期

FROM dual ;

 

范例6查询出所有在每年2月份雇佣的雇员信息

SELECT * FROM emp WHERE TO_CHAR(hiredate,'MM')='02' ;

 

范例7直接判断数字2

SELECT * FROM emp WHERE TO_CHAR(hiredate,'MM')=2 ;

 

范例8现在要求将每个雇员的雇佣日期进行格式化显示,要求所有的雇佣日期可以按照“年--日”的形式显示,也可以将雇佣的年、月、日拆开分别显示

SELECT   empno,ename,job,hiredate,

          TO_CHAR(hiredate,'YYYY-MM-DD') 格式化雇佣日期, TO_CHAR(hiredate,'YYYY') ,

          TO_CHAR(hiredate,'MM') ,TO_CHAR(hiredate,'DD')

FROM emp ;

 

范例9使用英文的日期格式表示出每个雇员的雇佣日期

SELECT  empno ,ename , hiredate ,TO_CHAR(hiredate,'YEAR-MONTH-DY')

FROM emp ;

 

 

 

范例0TO_CHAR格式化数字显示

SELECT  TO_CHAR(987654321.789,'999,999,999,999.99999')  格式化数字 ,

         TO_CHAR(987654321.789,'000,000,000,000.00000')  格式化数字

FROM dual ;

 

范例1TO_CHAR格式化货币显示

SELECT  TO_CHAR(987654321.789,'L999,999,999,999.99999')  显示货币 ,

         TO_CHAR(987654321.789,'$999,999,999,999.99999')  显示美圆

FROM dual ;

 

 

范例2使用TO_DATE()函数

SELECT TO_DATE('1979-09-19','YYYY-MM-DD')

FROM dual ;

 

范例3使用TO_TIMESTAMP()函数

SELECT TO_TIMESTAMP('1981-09-27 18:07:10','YYYY-MM-DD HH24:MI:SS') datetime

FROM dual ;

 

范例使用TO_NUMBER()函数将字符串变为数字

SELECT  TO_NUMBER('09') + TO_NUMBER('19') 加法计算 ,

         TO_NUMBER('09') * TO_NUMBER('19') 乘法计算

FROM dual ;

 

范例不利用TO_NUMBER()函数字符串也可以自动变为数字

SELECT '09' + '19' 加法计算 , '09' * '19' 乘法计算  

FROM dual ;

 

范例要求查询出每个雇员的编号、姓名、职位、雇佣日期、年薪

SELECT empno,ename,job,hiredate,(sal+comm) * 12 年薪

FROM emp ;

 

 

 

范例验证NVL()函数

SELECT NVL(null,0),NVL(3,0) FROM dual ;

 

范例使用NVL()函数解决年薪为null的情况。

SELECT empno,ename,job,hiredate,(sal + NVL(comm,0)) * 12 年薪 FROM emp ;

 

 

范例查询每个雇员的编号、姓名、年薪(sal + comm)、基本工资、奖金

SELECT empno , ename , NVL2(comm , sal+comm,sal) , sal , comm FROM emp ;

 

 

范例验证NULLIF()函数

select ISNULL(null,null)结果是null
select ISNULL(null,33)结果是33
select ISNULL('ddd',null)结果是ddd
select ISNULL(44,33)结果是44

 

SELECT NULLIF(1,1) , NULLIF(1,2) FROM dual ;

 

范例验证NULLIF()函数

SELECT empno , ename , job , LENGTH(ename) , LENGTH(job) , NULLIF(LENGTH(ename),LENGTH(job)) nullif

FROM emp ;

 

 

范例测试DECODE()函数

SELECT DECODE(2,1,'内容为一',2,'内容为二')  , DECODE(2,1,'内容为一','没有条件满足') FROM dual ;

 

范例现在雇员表中的工作有以下几种:

· CLERK:业务员

· SALESMAN:销售人员

· MANAGER:经理

· ANALYST:分析员

· PRESIDENT:总裁

要求可以查询雇员的姓名、职位、基本工资等信息,但是要求将所有的职位信息都替换为中文显示。

SELECT  ename, sal ,

        DECODE(job,

              'CLERK','业务员',

              'SALESMAN','销售人员',

              'MANAGER','经理',

              'ANALYST','分析员',

              'PRESIDENT','总裁') job

FROM emp ;

 

范例DECODE()函数中只判断部分内容

SELECT  ename, sal ,

        DECODE(job,

              'CLERK','业务员',

              'SALESMAN','销售人员',

              'MANAGER','经理') job

FROM emp ;

 

范例显示每个雇员的姓名、工资、职位,同时显示新的工资(新工资的标准为:办事员增长10%、销售人员增长20%、经理增长30%、其他职位的人增长50%

SELECT  ename, sal ,

        CASE job  WHEN 'CLERK' THEN sal * 1.1

                  WHEN 'SALESMAN' THEN sal * 1.2

                  WHEN 'MANAGER' THEN sal * 1.3

        ELSE      sal * 1.5

        END 新工资

FROM emp ;

 

 

 

 

范例验证COALESCE()函数的功能

SELECT ename, sal, comm, COALESCE(comm,100,2000) , COALESCE(comm,null,null) FROM emp ;

 

posted on 2016-08-23 22:59  肥宅兜  阅读(1198)  评论(0编辑  收藏  举报