SQL查询

ⅰ亾dé卋堺 提交于 2019-11-28 00:42:46

注 :dual 是一个虚拟表,用来构成select的语法规则,它实际是不存在的

 

一:单行函数

•字符串处理函数:UPPER(),LOWER() ,INITCAP(),LENGTH(),SUBSTR(),REPLACE();

•数值处理函数:ROUND(),TRUNC(),MOD();

•日期处理函数:ADD_MONTHS(),MONTHS_BETWEEN(),LAST_DAY(),NEXT_DAY();

•转换函数:TO_DATE(),TO_CHAR(),TO_NUMBER();

•通用函数:NVL(),DECODE()。

 

1.字符串处理函数

 

(1).转大小写函数:

    •转大写函数:UPPER(字符串 | 列);

    •转小写函数:LOWER(字符串| 列);

 

SELECT LOWER(ename) FROM 表名 ;                    //查询表里员工姓名,姓名小写显示

SELECT * FROM 表名 WHERE ename=UPPER('inputName');                    //查询输入的员工姓名,转大写

 

(2).获取字符串长度:

 

     •长度函数:数字 LENGTH(字符串 | 列);

 

SELECT * FROM emp WHERE LENGTH(ename) = 5 ;                    //查询所有姓名长度为5的雇员信息

 

(3).字符串截取; SUBSTR(汉译:字符串的子串,就是截取呀)

    •截取函数:字符串 SUBSTR(字符串| 列 ,截取索引起始,[长度]),如果没有长度,表示截取到结尾 ;

 

SELECT 'HELLO' ,SUBSTR('HELLO',2,3) FROM  表名 ;                       //从表里截取‘HELLO’字符串,从第二位开始,截取3个长度

SELECT ename,SUBSTR(ename,LENGTH(ename)-2) FROM emp ;        //查询雇员姓名后三位字符,这里使用的是传统索引

SELECT ename,SUBSTR(ename , -3) FROM emp ;        //查询雇员姓名后三位字符,Oracle支持有负数索引

备注:Oracle的截取索引是从1开始的,而我们在其他程序索引都是从第0位开始的

 

(4).字符串替换:

    • 替换函数:字符串 REPLACE(字符串 | 列 , 原始内容,替换内容)

 

     SELECT REPLACE('HELLO', 'E' , 'M') FROM dual ;                   //把“HELLO”中的“E”替换为“M”;

 

2.数值处理函数

(1)四舍五入:

          四舍五入:数字 ROUND(数值 | 列[,保留小位数位数])

         SELECT ROUND(1.23456) FROM dual ;                       //处理后的结果为 ”1“

         SELECT ROUND(1.123456,2) FROM dual ;                  //处理后的结果为1.12 ,保留了2位小数位

         SELECT ROUND(399,-2) FROM dual ;                            //处理后的结果为400,当保留小数的位数设置为负数,则表示操作的是整数

 

(2)截取小数(省略小数位):

         截取小数:SELECT TRUNC(数值 | 列 [,保留小数位])                                //   TRUNC汉译:将数字截尾取整

              SELECT TRUNC(1.123456) FROM dual ;                                          //运行结果为:1

              SELECT   TRUNC(1999,-3) FROM dual ;                                          //执行结果为:19

(3)     求模(余数):

       •      求模函数:数值MOD(数值 1 | 列 1,数值2 | 列2)

                SELECT MOD (20,7) FROM dual ;                                                   //执行结果: 余数为 6  

3.日期函数

(1)SYSDATE :系统日期

         SELECT SYSDATE FROM FROM dual ;                                    //获取当前日期

       SELECT SYSDATE + 300 FROM  dual ;                                     //获取300天后日期

          SELECT SYSDATE -  500 FROM  dual ;                                     //获取500天前日期

          SELECT SYSDATE - hiredate FROM  emp ;                                //获取雇员被雇佣天数

(2)SYSTIMESTAMP: 时间戳                                         

         SLEECT SEYSTIMESTAMP FROM dual ;                                                  //获取当前时间戳

(3)ADD_MONTHS() :计算若干月之后日期

          SELECT ADD_MONTHS(SYSDATE,10) FROM dual ;                                 //10个月之后的日期

(4)LAST_DAY():获取当前月的最后一天日期

     SELECT LAST_DAY(SYSDATE) FROM dual ;               

     SELECT ename,hiredate,LAST_DAY(hiredate)-2 FROM emp ;                       //雇佣所在月倒数第三天

(5)NEXT_DAY():获取下一个指定日期时间数的日期;

     SELECT NEXT_DAY(SYSDATE,'星期二') FROM dual ;

  (6)MONTHS_BETWEEN():计算两个日期之间所跨越的总月数;

       SELECT ename,MONTHS_BETWEEN(SYSDATE,hiredate) FROM emp;       //从雇佣到现在日期时长

       SELECT ename,hirtedate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) year FROM emp ;   // 计算雇佣年份

       SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) year,

                                                    TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) months   FROM emp ;    //计算雇佣年份加月份

       SELECT ename,hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) year,

                                                    TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) months   FROM emp

                                                   TRUNC(SYSDATE-ADD_MONTHS(hiredate,MONTHS_BETWEEN(SYSDATE,hiredate))) day FROM emp;    //计算雇佣年份加月份

 

5.转换函数:

TO_CHAR(日期|数字|列,转换格式):可以将数字或日期进行格式化的显示处理

(1)日期转换

SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd') FROM dual ;                                  //日期转换

SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') FROM dual ;                //详细时间转换

(2)货币转换

SELECT TO_CHAR(123456,'L999,999') FROM dual;               //执行结果 :999,999

 

TO_DATE(字符串 | 列,格式):将字符串转为DATE类型

SELECT TO_DATE('2006-11-20 20:39:15','yyyy-mm') FROM dual ;                           //日期转换

 

TO_NUMBER()日期转换

SELECT TO——NUMBER(‘1’) + TO_NUMBER('2') FROM dual ;          //运行结果 :3

SELECT '1' + '2' dual ;                                    //运行结果:3

 

6.通用函数:

 NVL() :把空转换为0,当需要数据计算时使用

SELECT ename,comm,NVL(comm,0),(sal+NVL(comm,0)) * 12 income FROM emp ;                     //运行结果:把空值替换为0了

 

DECODE() :数值内容的判断与替换操作

DECODE(数据 | 列,匹配内容1,返回内容1,[不满足时的内容])

SELECT ename,job ,DECODE(job,'CLERK','办事员',‘无法判断的内容’)decode FROM emp;              //这里对指定的CLERK替换为办事员,查询不到的返回

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!