单行函数

一、SQL函数概述
  • SQL函数分类

单行函数
多行函数

  • 单行函数语法

语法:
函数名[(参数1,参数2,….)]

  • 注意:其中的参数可以是以下之一:
    变量
    列名
    表达式
  • 单行函数特征
  1. 单行函数对单行操作
  2. 每行返回一个结果
  3. 有可能返回值与原参数数据类型不一致
  4. 单行函数可以写在SELECT、WHERE、ORDER BY子句中
  5. 有些函数没有参数,有些函数包括一个或多个参数
  6. 函数可以嵌套
  • 单行函数分类
  1. 字符函数
  2. 通用函数
  3. 转换函数
  4. 日期函数
  5. 数值函数
二、字符函数

主要指参数类型是字符型,不同函数返回值可能是字符型或数值型。

  • 大小写转换函数
  • LOWER(列名|表达式):将大写或大小写混合的字符串转换成小写
LOWER('SQL  Course')        //结果为sql course
  • UPPER(列名|表达式):将小写或大小写混合的字符串转换成大写
UPPER('SQL  Course)        //结果为SQL COURSE
  • INTICAP(列名|表达式):将每一个单词的第一个字母转换成大写,其余的字母都转换成小写。
INITCAP('SQL  Course')        //结果为Sql Course
  • 字符处理函数

CONCAT(参数1,参数2)

  • 连接两个值,等同于||
  • 例如:
CONCAT('Good' , 'String')        //结果为GoodString

SUBSTR(参数1,n1,n2)

  • 返参数1中,从第n1位开始,长度为n2的子串
  1. 如果n2省略,取第n1位开始的所有字符
  2. 如果n1是负值,表示从第一个参数的后面第abs(n1)位开始,向右取长度为n2的子串
  • 例如:
SUBSTR('String' , 1 , 3)       //结果为Str

LENGTH(参数)

  • 取字符串的长度
  • 例如:
LENGTH('String')       //结果为6

INSTR(s1,s2,n1,n2)

  • 返回s1中,子串s2从n1位置开始,第n2次出现的位置。n1和n2默认值都为1。
  • 例如:
INSTR('String',r,)       //结果为3

LPAD(s1,n1,s2)

  • 返回s1被s2左填充到n1长度后的字符串
  • 例如:
LPAD(sal,10,*)       //结果为******5000

RPAD(s1,n1,s2)

  • 返回s1被s2右填充到n1长度后的字符串
  • 例如:
RPAD(sal,10,*)        //结果为5000******

TRIM(参数1 From 参数2)

  • 去掉字符串头部或者尾部(头尾)的字符
  • 例如:
TRIM('S' From 'SSSHHHLLL')        //结果为HHHLLL

REPLACE(s1,s2,s3)

  • 把s1中的s2用s3替换。
  • 例如:
RPPLACE('Sring' , 'rin','****')        //结果为S****g
三、数值函数

DUAL:是一张虚表,不能保存任何数据,只有一个字段,一行记录。当我们不希望从任何表中读取数据,同时又想利用SQL引擎中的计算表达式的能力帮我们运算时,就可以使用DUAL表。

ROUND(参数,n)

  • 将参数所表示的数值四舍五入到小数点后的第n位
  • 例如:
ROUND(45.926)       //结果为45.93

TRUNC(参数,n)

  • 将参数所表示的数值截取到小数点后的第n位
  • 例如:
TRUNC(45.926)       //结果为54.92

MOD(m,n)

  • 取m除以n后得到的余数
  • 例如:
MOD(1600,300)        //结果为100
四、日期的处理

Oracle是以一种内部的数值形式存储日期的,即:世纪、年、月、日、时、分、秒
默认的日期格式:DD-MON-RR

五、日期的运算
  • 日期类型可以加减数字,功能是在该日期上加减相应的天数。

如:‘10-AUG-18’+15结果是‘25-AUG-18’

  • 日期类型之间可以进行减操作,功能是计算两个日期之间相隔多少天。

如:‘25-AUG-18’- ‘10-AUG-18’结果四舍五入后是15天

  • 如果需要对一个日期进行加减相应的小时操作,可以使用n/24来实现。
  • SYSDATE:返回系统的当前时间。
六、日期函数
  • 日期的RR格式和YY格式在给定的日期而实际代表的日期是多少呢?


    2019-02-14_155321.png
  • 常用的日期函数
  1. SYSDATE:返回系统日期
  2. MONTHS_BETWEEN:返回两个日期类型之间相隔的自然月数
  3. ADD_MONTHS:返回指定日期加上指定月数后的日期
  4. NEXT_DAY:返回某个日期指定的下一个日期
  5. LAST_DAY:返回指定日期当月最后一天的日期
  6. ROUND(date [ , ’fmt’ ])将date按照fmt指定的格式进行四舍五入,fmt为可选项,如果没有指定fmt。默认为DD,将date四舍五入最近的一天。
    格式:世纪CC,年YY,月MM,日DD,小时HH24,分MI,秒SS
  7. TRUNC(date [ , ’fmt’ ])将date按照fmt中指定的格式进行截断,fmt为可选项,如果没有指定fmt,默认为DD,将date截断为最近的一天。
  8. EXTRACT:返回日期数据类型中的年份,月份或者日。
七、转换函数
  • 隐式数据类型转换规则
    不同的数据类型之间关联,如果不使用显式转换函数,则他会根据以下规则对数据进行隐式转换:

    1. 对于INSERT和UPDATE操作,oracle会把插入值或者更新值隐式转换为字的数据类型
    2. 对于SELECT语句,oracle会把字段数据类型隐式转换为变量的数据类型
    3. 当比较一个数值型和一个字符型的值时,oracle会隐式的将字符型转换为数值型。
    4. 当比较字符型和日期型的数据时,oracle会自动将字符型转换为日期型
    5. 当链接操作符(||)时,oracle会将非字符型的数据转换成字符型
    6. 如果字符型的数据和非字符型的数据(如number、date、rowid等)作算术运算,则oracle会将字符型的数据转换为合适的数据类型,这些数据可能是number、date、rowid等。
  • 显式数据类型转换
    通常是在字符类型、日期类型、数值类型之间进行显示转换。主要有3个显示转换函数:

TO_CHAR
TO_NUMBER
TO_DATE

  1. TO_CHAR用于日期型 TO_CHAR(date,'fmt')
    日期格式模型:
    - 必须用单引号引起来并且是大小写敏感的
    - 可以包含任何有效的日期元素
    - 使用逗号将日期型数据与日期型格式模型分开


    2019-02-14_160446.png
  1. TO_CHAR用于数值型 TO_CHAR(number,'fmt')
    通过TO_CHAR中使用以下形式可以把数值型数据转化成变长的字符串
    2019-02-14_160724.png

    注意:进行数字型到字符型转换时,格式中的宽度一定要超过实际列宽度,否则会显示我###
  1. TO_NUMBER和TO_DATE函数
  • 使用TO_NUMBER将一个字符串转换成数值型数据
    TO_NUMBER(char[,'fmt'])
    注意:要转换的char类型的数据必须是由数字组成的字符串,格式码中相应的格式必须要和char中的格式匹配。
  • 使用TO_DATE将一个字符串转换成日期型数据
    TO_DATE(char[,'fmt'])
    注意:要转换的char类型的数据必须是可以转换成日期的,格式码中相应的格式必须要和char中的格式匹配。
八、通用函数

与空值(NULL)相关的一些函数,完成对空值(NULL)的一些操作。主要包括以下函数:

   -   NVL
   -  NVL2
   -  NULL IF
   -  COALESCE
条件处理函数:
   -  CASE表达式
   -  DECODE
  • NVL函数

语法:NVL(参数1,参数2)
如果参数1不是NULL,返回参数1,否则返回参数2

  • NVL2函数

语法:NVL2(参数1,参数2,参数3)
如果参数1不是NULL,返回参数2,否则返回参数3

  • NULL IF函数

语法:NULL IF(参数1,参数2)
比较两个参数(表达式),如果相等,返回NULL,否则,返回第一个参数(表达式)

  • COALESCE函数

语法:COALESCE (表达式1,表达式2,….表达式n)
该函数是对NVL函数的扩展。COALESCE函数的功能是返回第一个不为空的参数,参数个数不受限制。

  • CASE和DECODE函数

DECODE (字段|表达式,条件1,结果1[,条件2,结果2….] [,缺省值])
例子:

SELECT ename, deptno, 
   decode(deptno, 
    10,'销售部', 
    20,'技术部', 
    30 , '管理部', 
   '无')   deptname 
FROM emp;  
                    //备注:不常用,了解就行
九、函数的嵌套
  • 单行函数可以嵌套于任何层

  • 嵌套的函数是从最里层向最外层的顺序计算的

  • 例如:

SELECT  ename, 
      NVL(TO_CHAR(mgr),'No Manager') 
      FROM  emp 
      WHERE  mgr IS NULL;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • SQL函数 SQL函数分类 SQL函数主要有两种,分为单行函数、多行函数单行函数:只对一行进行变换,每行返回一个结...
    MPPC阅读 681评论 0 7
  • 三、单行函数 --什么是单行函数? 单行函数:function_name [(arg1, arg2,...)] ...
    涨财司阅读 277评论 0 0
  • 定义:只对一行进行变换,并产生结果 6种 一、字符函数 第一类:lower 、upper、 initcap--大小...
    52Hz的蓝鲸阅读 238评论 0 0
  • 函数的分类:1,单行函数:对每一条记录输入值进行计算,得到相应的计算结果,返回给用户,也就是说,每条记录作为一个输...
    蛋炒饭_By阅读 1,436评论 0 0
  • “我要吃肉。”猴子眼神扫过饭盒后,略不高兴地与大魔王对视说。 “只有这个。”大魔王颇为无奈回应道。 “我要吃肉。”...
    暖气万岁阅读 105评论 0 0