Oracle单行函数

查询

 select *from emp where ename=UPPER('&inputname');
输入 inputname 的值:  smith
原值    1: select *from emp where ename=UPPER('&inputname')
新值    1: select *from emp where ename=UPPER('smith')

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                 20

字符串函数

字符串 UPPER(列|字符串)  将所有字符串变为大写
字符串 LOWER(列|字符串)  将所有字符串变为大写
字符串 INITCAP(列|字符串)  开头字母大写,其余全部小写
数字 LENGTH(列|字符串)  取得字符串长度
字符串 SUBSTR(列|字符串,开始索引,[长度]) 截取字符串,若没有设置长度,则从开始截取到结尾
字符串 REPLACE(列|字符串,旧内容,新内容)  新内容替换旧内容

UPPER

select upper('hello') from dual;   //专供查询的dual为虚表

UPPER('HEL
----------
HELLO

LOWER

 select lower (ename) from emp;

LOWER(ENAME)
--------------------
smith
allen
ward
jones
martin
blake
clark
scott
king
turner
adams
james
ford
miller
已选择14行。

INITCAP

 select ename,initcap(ename) from emp;

ENAME                INITCAP(ENAME)
-------------------- --------------------
SMITH                Smith
ALLEN                Allen
WARD                 Ward
JONES                Jones
MARTIN               Martin
BLAKE                Blake
CLARK                Clark
SCOTT                Scott
KING                 King
TURNER               Turner
ADAMS                Adams
JAMES                James
FORD                 Ford
MILLER               Miller

已选择14行。

LENGTH

 select length('djdjjdjdjskskks') from dual;

LENGTH('DJDJJDJDJSKSKKS')
-------------------------
                       15
-------------查询姓名长度为5的雇员信息-------------
select *from emp where length(ename)=5;

     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 17-12月-80            800                 20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      30
      7566 JONES                MANAGER                  7839 02-4月 -81           2975                 20
      7698 BLAKE                MANAGER                  7839 01-5月 -81           2850                 30
      7782 CLARK                MANAGER                  7839 09-6月 -81           2450                 10
      7788 SCOTT                ANALYST                  7566 19-4月 -87           3000                 20
      7876 ADAMS                CLERK                    7788 23-5月 -87           1100                 20
      7900 JAMES                CLERK                    7698 03-12月-81            950                 30

已选择8行。

SUBSTR(Oracle默认从1开始而不是0)

 select substr('helloworld',6) from dual;
SUBSTR('HE
----------
world
---------------------------------------------------------
select substr('helloworld',1,5) from dual;
SUBSTR('HE
----------
hello
---------------------------------------------------------
select ename,substr(ename,1,3) from emp;

ENAME                SUBSTR(ENAME,1,3)
-------------------- ------------------------
SMITH                SMI
ALLEN                ALL
WARD                 WAR
JONES                JON
MARTIN               MAR
BLAKE                BLA
CLARK                CLA
SCOTT                SCO
KING                 KIN
TURNER               TUR
ADAMS                ADA
JAMES                JAM
FORD                 FOR
MILLER               MIL
--------------------从后面截取--------------
select ename,substr(ename,length(ename)-2) from emp;
select ename,substr(ename,-3) from emp;
ENAME                SUBSTR(ENAME,LENGTH(ENAME)-2)
-------------------- --------------------------------------------------------------------------------
SMITH                ITH
ALLEN                LEN
WARD                 ARD
JONES                NES
MARTIN               TIN
BLAKE                AKE
CLARK                ARK
SCOTT                OTT
KING                 ING
TURNER               NER
ADAMS                AMS
JAMES                MES
FORD                 ORD
MILLER               LER

数值函数

数字 ROUND (列 | 数字 [,小数位])  实现数据的四舍五入,可以设置保留小数位
----------------------------------------------------------------------------------------
数字 TRUNC (列 | 数字 [,小数位])  实现数据的截取,即不进位
----------------------------------------------------------------------------------------
数字 MOD(列 | 数字 ,列 | 数字)   求模(计算余数)

ROUND(会进位)

select round(789.36544555) from dual;
ROUND(789.36544555)
-------------------
                789
---------------------------------------------------------
select round(256.55555555,2) from dual;
ROUND(256.55555555,2)
---------------------
               256.56

TRUNC(不会进位)

select trunc(225.658255,2) from dual;
TRUNC(225.658255,2)
-------------------
             225.65
---------------------------------------------------------
select trunc(225.658255) from dual;
TRUNC(225.658255)
-----------------
              225

MOD

 select mod(10,3) from dual;
 MOD(10,3)
----------
         1

日期函数


伪列: SYSDATE SYSTIMESTAMP
模糊日期操作公式:
日期+数字=日期(若干天之后的日期)
日期-数字=日期(若干天之前的日期)
日期-日期=数字(天数)

select sysdate from dual;
SYSDATE
--------------
04-4月 -17
select systimestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
04-4月 -17 09.34.09.223000 上午 +08:00

日期操作(7天前,120天之后)

 select sysdate-7,sysdate+120 from dual;
SYSDATE-7      SYSDATE+120
-------------- --------------
28-3月 -17     02-8月 -17

查询入职日期

 select empno,ename,sal,job,sysdate-hiredate from emp;
     EMPNO ENAME                       SAL JOB                SYSDATE-HIREDATE
---------- -------------------- ---------- ------------------ ----------------
      7369 SMITH                       800 CLERK                    13257.4062
      7499 ALLEN                      1600 SALESMAN                 13192.4062
      7521 WARD                       1250 SALESMAN                 13190.4062
      7566 JONES                      2975 MANAGER                  13151.4062
      7654 MARTIN                     1250 SALESMAN                 12972.4062
      7698 BLAKE                      2850 MANAGER                  13122.4062
      7782 CLARK                      2450 MANAGER                  13083.4062
      7788 SCOTT                      3000 ANALYST                  10943.4062
      7839 KING                       5000 PRESIDENT                12922.4062
      7844 TURNER                     1500 SALESMAN                 12992.4062
      7876 ADAMS                      1100 CLERK                    10909.4062
      7900 JAMES                       950 CLERK                    12906.4062
      7902 FORD                       3000 ANALYST                  12906.4062
      7934 MILLER                     1300 CLERK                    12855.4062

准确计算公式

日期 AND_MONTHS(列 | 日期,月数)    在指定日期上增加若干月之后的日期
数字  MONTHS_BETWEEN(列|日期,列|日期)      返回两个日期之间所经历的月数
日期 LAST_DAY(列|日期)    取得所在日期月的最后一天
日期 NEXT_DAY(列|日期,星期X)  返回下一个指定的一周时间数对应的日期

4个月之后

 select add_months(sysdate,4) from dual;
ADD_MONTHS(SYS
--------------
04-8月 -17
----------------------------------------------------
 select add_months(sysdate,4),add_months(sysdate,20) from dual;
ADD_MONTHS(SYS ADD_MONTHS(SYS
-------------- --------------
04-8月 -17     04-12月-18

MONTHS_BETWEEN

 select empno,ename,hiredate,months_between(sysdate,hiredate) from emp;
     EMPNO ENAME                HIREDATE       MONTHS_BETWEEN(SYSDATE,HIREDATE)
---------- -------------------- -------------- --------------------------------
      7369 SMITH                17-12月-80                            435.59685
      7499 ALLEN                20-2月 -81                           433.500076
      7521 WARD                 22-2月 -81                            433.43556
      7566 JONES                02-4月 -81                           432.080721
      7654 MARTIN               28-9月 -81                           426.242012
      7698 BLAKE                01-5月 -81                           431.112979
      7782 CLARK                09-6月 -81                           429.854915
      7788 SCOTT                19-4月 -87                           359.532334
      7839 KING                 17-11月-81                            424.59685
      7844 TURNER               08-9月 -81                           426.887173
      7876 ADAMS                23-5月 -87                           358.403302
      7900 JAMES                03-12月-81                           424.048463
      7902 FORD                 03-12月-81                           424.048463
      7934 MILLER               23-1月 -82                           422.403302

LAST_DAY

//查询当前月的最后一天
 select last_day(sysdate) from dual;
LAST_DAY(SYSDA
--------------
30-4月 -17
-------------------------------------------------------
//查询所有在雇佣所在月倒数前三天的雇员信息   where 筛选作用
 select empno,ename,hiredate,last_day(hiredate)-2 from emp where hiredate=last_day(hiredate)-2;
     EMPNO ENAME                HIREDATE       LAST_DAY(HIRED
---------- -------------------- -------------- --------------
      7654 MARTIN               28-9月 -81     28-9月 -81

NEXT_DAY(返回当前日期下周X所对应的日期)

 select next_day(sysdate,'星期二') from dual;
NEXT_DAY(SYSDA
--------------
11-4月 -17

以年月日的形式计算出每个雇员到现在的雇佣时间

日期图
 select empno,ename,hiredate,
  2  trunc(months_between(sysdate,hiredate)/12) years,
  3  trunc(mod(months_between(sysdate,hiredate),12)) months,
  4  trunc(sysdate-add_months(hiredate,months_between(sysdate,hiredate))) days
  5  from emp;
     EMPNO ENAME                HIREDATE            YEARS     MONTHS       DAYS
---------- -------------------- -------------- ---------- ---------- ----------
      7369 SMITH                17-12月-80             36          3         18
      7499 ALLEN                20-2月 -81             36          1         15
      7521 WARD                 22-2月 -81             36          1         13
      7566 JONES                02-4月 -81             36          0          2
      7654 MARTIN               28-9月 -81             35          6          7
      7698 BLAKE                01-5月 -81             35         11          3
      7782 CLARK                09-6月 -81             35          9         26
      7788 SCOTT                19-4月 -87             29         11         16
      7839 KING                 17-11月-81             35          4         18
      7844 TURNER               08-9月 -81             35          6         27
      7876 ADAMS                23-5月 -87             29         10         12
      7900 JAMES                03-12月-81             35          4          1
      7902 FORD                 03-12月-81             35          4          1
      7934 MILLER               23-1月 -82             35          2         12

转换函数

字符串 TO_CHAR(列|日期|数字,转换格式)   将日期或数字转换成指定结构的字符串
日期 TO_DATE(列|字符串,转换格式)   按照指定的转换格式编写字符串后将其变为日期型数据
数字 TO_NUMBER(列|字符串)   将字符串变为数字

一、TO_CHAR
转换格式

日期:年(yyyy)、月(mm)、日(dd);
时间:时(hh、hh24)、分(mi)、秒(ss);
数字:任意数字(9)、本地货币符号(L)。

转换当前日期

SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;
TO_CHAR(SYSDATE,'YYY
--------------------
2017-04-08
------------------------------------------------
SQL> select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDHH:MI:SS')
--------------------------------------
2017-04-08 03:36:17
-------------------------------------------------
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2017-04-08 15:37:28

日期数据的拆分

SQL> select to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),to_char(sysdate,'dd') from dual;
TO_CHAR( TO_C TO_C
-------- ---- ----
2017     04   08

查询在二月份雇佣的员工

SQL> select *from emp where to_char(hiredate,'mm')='02';
     select *from emp where to_char(hiredate,'mm')=2;
     EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7499 ALLEN                SALESMAN                 7698 20-2月 -81           1600        300      30
      7521 WARD                 SALESMAN                 7698 22-2月 -81           1250        500      30

格式化数字

SQL> select to_char(9999999999,'L999,999,999,999,999') from dual;
TO_CHAR(9999999999,'L999,999,999,999,999')
------------------------------------------------------------
              ¥9,999,999,999

二、TO_DATE
将字符串转为日期

SQL> select to_date('2016-05-15','yyyy-mm-dd') from dual;
TO_DATE('2016-
--------------
15-5月 -16

三、TO_NUMBER

//提供默认转换    select '1'+'2' from dual;与下面一致
SQL> select to_number('1')+to_number('2') from dual;
TO_NUMBER('1')+TO_NUMBER('2')
-----------------------------
                            3

通用函数

数字 NVL(列|NULL,默认值)   如果传入的内容是NULL,则使用默认数值处理;如果不是NULL则使用原始数据处理;
数据类型 DECODE(列|字符串|数值,比较内容1,显示内容1,比较内容2,显示内容2,...[,默认显示内容])  设置的内容会与每一个比较内容进行比较,如果内容相同,则会使用显示内容进行输出,如何都不相同,则使用最后的默认信息输出。

一、 NVL 处理NULL函数(任何数与NULL运算都为NULL此时把NULL替换成0,所以要处理NULL值)

SQL> select empno,ename,comm,(sal+nvl(comm,0))*12 from emp;
     EMPNO ENAME                      COMM (SAL+NVL(COMM,0))*12
---------- -------------------- ---------- --------------------
      7369 SMITH                                           9600
      7499 ALLEN                       300                22800
      7521 WARD                        500                21000
      7566 JONES                                          35700
      7654 MARTIN                     1400                31800
      7698 BLAKE                                          34200
      7782 CLARK                                          29400
      7788 SCOTT                                          36000
      7839 KING                                           60000
      7844 TURNER                        0                18000
      7876 ADAMS                                          13200
      7900 JAMES                                          11400
      7902 FORD                                           36000
      7934 MILLER                                         15600

二、DECODE(比较输出)
将职位信息换成中文(要设置则全部设置,不设置的为NULL,若不设置也可用‘---’表示)

SQL> select ename,job,decode(job,'CLERK','办事员','SALESMAN','销售') from emp;
ENAME                JOB                DECODE(JOB,'CLERK'
-------------------- ------------------ ------------------
SMITH                CLERK              办事员
ALLEN                SALESMAN           销售
WARD                 SALESMAN           销售
JONES                MANAGER
MARTIN               SALESMAN           销售
BLAKE                MANAGER
CLARK                MANAGER
SCOTT                ANALYST
KING                 PRESIDENT
TURNER               SALESMAN           销售
ADAMS                CLERK              办事员
JAMES                CLERK              办事员
FORD                 ANALYST
MILLER               CLERK              办事员
-----------------------------------------------------
SQL> select ename,job,decode(job,'CLERK','办事员','SALESMAN','销售','---') from emp;

ENAME                JOB                DECODE(JOB,'CLERK'
-------------------- ------------------ ------------------
SMITH                CLERK              办事员
ALLEN                SALESMAN           销售
WARD                 SALESMAN           销售
JONES                MANAGER            ---
MARTIN               SALESMAN           销售
BLAKE                MANAGER            ---
CLARK                MANAGER            ---
SCOTT                ANALYST            ---
KING                 PRESIDENT          ---
TURNER               SALESMAN           销售
ADAMS                CLERK              办事员
JAMES                CLERK              办事员
FORD                 ANALYST            ---
MILLER               CLERK              办事员
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 单行函数 SQL函数: 两种sql函数 单行函数 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一...
    我可能是个假开发阅读 282评论 0 6
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,699评论 0 2
  • SQL ==SQLPLUS== DML(Data Manipulation Language,数据操作语言)---...
    蝌蚪1573阅读 577评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 简介 开发者应该经常看到单例模式这个设计模式,那什么是单例模式呢? 我们知道面向对象编程会生成很多实例,比如对于学...
    Cloudox_阅读 120评论 0 0