Oracle_SQL_day02_SQL函数

1、单行函数

  • 字符类型(character)
  • 数值类型(number)
  • 通用函数

2、多行函数

  • 又称为组函数或聚和函数
  • LOWER 小写函数
  • UPPER 大写函数
  • CONCAT
  • 拼接函数
  • SUBSTR 求子串函数
  • LENGTH 字符串的长度
  • LPAD 右对齐函数,位数不够的,左边补指定字符
  • RPAD 左对齐函数,位数不够的,右边补指定字符
    字符串的大小写转换

LOWER(‘SQL Course’)
结果: sql course
UPPER(‘SQL Course’)
结果: SQL COURSE
INITCAP(‘SQL Course’)
结果: Sql Course

字符串的常规操作

CONCAT(‘Good’,‘String’)
结果: GoodString
SUBSTR(‘String’,1,3)
结果:Str
LENGTH(‘String’)
结果:6
LPAD(‘String’,10,’*’)
结果:****String

3、数值函数
ROUND 四舍五入函数
TRUNC 截取函数

 ROUND(45.923,2) --》45.92
 ROUND(45.923,0) --》46
ROUND(45.923,-1) --》50
 TRUNC(45.923,2) --》45.92
 TRUNC(45.923)  --》45
 TRUNC(45.923,-1)  --》40

4.日期类型的运算

对日期加减一个数字,返回值为一个日期
两个日期相减表示两个日期相差多少天
months_between(’01-SEP-95’,’11-JAN-94’)
19.774194
add_months(’11-JAN-94’,6)
11-JUL-94
next_day(’01-SEP-95’,’FRIDAY’)
08-SEP-95
last_day(’01-SEP-95’)
30-SEP-95
yyyy:用数字表达的四位年(2009年)
mm:用数字表达的二位月(01月)
dd:用数字表达的二位日(01日)
hh24:用数字表达的24进制的小时(20点)
h12:用数字表达的12进制的小时(8点)
mi:用数字表达的分钟(30分)
ss:用数字表达的小时(30秒)
d:用数字表达的一周内的第几天(周日:1)
day:用全拼表达的星期几(sunday)
month:用全拼表达的月(march)
sysdate=’25-MAY-09’
round(sysdate,’MONTH’)
01-JUN-09
round(sysdate,’YEAR’)
01-JAN-09
trunc(sysdate,’MONTH’)
01-MAY-09
trunc(sysdate,’YEAR’)
01-JAN-09

5、转换函数

TO_NUMBER将字符串转换成数值
TO_CHAR将数值或日期转化成字符串
转换函数中包含格式说明
TO_NUMBER TO_DATE
数值 <------------ 字符 ------------> 日期

             ------------->              <------------
             因此我们说字符是日期和数字的桥梁

to_number语法
例子
SELECT TO_NUMBER(’12’)*12
FROM dual;
TO_NUMBER(char)
SELECT TO_NUMBER(’ab’,’xx’)
FROM dual;

TO_CHAR 函数( ( 数值类型) )

语法
格式说明
9 代表数字位
0 定义宽度大于实际值宽度时,0会被强制显示在前面,以补齐位数

$ 美元的货币符号
L 本地货币符号
. 小数点
, 每千位显示一个逗号

如果显示位数不足(定义宽度小于实际值宽度),用#代替
用法:9按实际位数显示,0按定义位数显示,不足的补0
SELECT ename,TO_CHAR(sal,’$99,999.99’)
FROM emp;
用法:9按实际位数显示,0按定义位数显示,不足的补0
SELECT ename,TO_CHAR(sal,’$00,000.00’)
FROM emp;
SELECT ename,TO_CHAR(sal,’L99,999.99’)
FROM emp;

TO_DATE 函数

语法:TO_DATE(char[, 'fmt'])
例子:INSERT INTO emp (empno, ename, sal, hiredate)
VALUES (26, 'Donna', 3000,TO_DATE('01-10-10 08:00', 'DD-MM-YY HH:MI'));

用TO_DATE函数将字符串转换成一个日期值
TO_DATE(’10 September 2009’,’dd Month yyyy’)
TO_CHAR(date, 'fmt')
格式说明
第一个参数为要处理的日期,第二个参数为格式
格式必须用单引号括起来,并且大小写敏感
必须是有效的日期格式
NVL 空值处理函数
COALESCE 空值处理函数
DECODE 分支函数
NVL(comm,0)
NVL(hiredate,‘01-9月-10')
NVL(job,'No Job Yet')
COALESCE(comm, salary, 100)
DECODE(job, 'SALESMAN', 1.10sal,
'ANALYST', 1.15
sal,
'MANAGER', 1.20*sal,
sal)

组函数操作在一组行(记录)上,每组返回一个结果
组函数可以出现在SELECT子句和HAVING子句中
GROUP BY子句将行分成若干个组
HAVING子句对分组后的结果进行过滤

组函数 :

AVG和SUM只能针对NUMBER类型
COUNT和MAX和MIN可以针对任何类型
SELECT AVG(sal), MAX(sal), MIN(sal), SUM(sal)
FROM emp
WHERE UPPER(job) LIKE 'SALES%';
SELECT MIN(ename), MAX(ename) FROM emp;

缺省情况组函数处理所有的非空值

SELECT COUNT(comm)
FROM emp
WHERE deptno = 20;

COUNT(*)统计记录总数

SELECT COUNT(*)
FROM emp
WHERE deptno = 30;

2 GROUP BY 及 HAVING
GROUP BY 子句 :

SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BYcolumn];
SELECT deptno, COUNT(*)  ”Number ”
FROM emp
GROUP BY deptno;

有 GROUP BY 子句的 SELECT语句执行过程

根据GROUP BY子句指定的表达式,将要处理的数据(若有
WHERE子句即为通过条件过滤后的数据)分成若干组,每组
有唯一的组标识,组内有若干条记录,根据SELECT后面的
组函数对每组的记录进行计算,每组对应一个返回值

若有GROUP BY子句,SELECT后面可跟GROUP BY后面跟的
表达式以及组函数,其它会报错

SELECT ename, AVG(sal)
FROM emp
GROUP BY deptno;
SELECT ename, AVG(sal)
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression

GROUP BY子句中包含多列,分组的粒度更细,即每组的记
录少了,但组多了
各个部门不同职位的人数

SELECT deptno, job, COUNT(*)
FROM emp
GROUP BY deptno, job;

HAVING 子句 :

SELECT column, group_function
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

有 HAVING 子句的 SELECT
行被分组
将HAVING子句的条件应用到每个分组上
只有符合HAVING条件的组被保留,再应用SELECT后面的组
函数对每组的数据进行处理

SELECT job, SUM(sal) PAYROLL
FROM emp
WHERE job NOT LIKE 'P%'
GROUP BY job
HAVING SUM(sal) > 5000
ORDER BY SUM(sal);

WHERE 子句和 HAVING

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

推荐阅读更多精彩内容

  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,680评论 0 2
  • ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year:...
    雨一流阅读 649评论 0 2
  • SQL ==SQLPLUS== DML(Data Manipulation Language,数据操作语言)---...
    蝌蚪1573阅读 571评论 0 4
  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 1,870评论 0 4
  • 别人有故事, 我有美酒, 饮一杯, 香甜可口。 听了别人的故事, 饮了杯我的烈酒, 干咽刺喉, 干咽刺喉。 你想听...
    了草阅读 215评论 0 0