Oracle学习笔记(四):常用内置函数

自己学习Oracle的相关笔记,主要备忘,并不详细,如有错误欢迎大家指正~~~


1. 数值型函数

  • 绝对值(ABS)
SELECT ABS(10),ABS(-10) FROM DUAL;
1.png

关于DUAL表

  • 取余(MOD)

MOD(n1,n2): 返回n1除以n2的余数,若n2为0,则返回n1;

SELECT MOD(7,2),MOD(15/3,5),MOD('12',2),MOD(-12,5),MOD(2,0) FROM DUAL;
2.png
  • 判断正负

SIGN(n):返回参数n的符号,正数为1,0为0,负数为-1,若n为BINARY_FLOAT或BINARY_DOUBLE,n>=0或n=NaN都会返回1

SELECT SIGN(2),SIGN('-2'),SIGN(0.00),SIGN(2*'-2') FROM DUAL;
3.png
  • 三角函数

COS(n),ACOS(n),COSH(n),SIN(n),ASIN(n),SINH(n),TAN(n),ATAN(n).TANH(n):n为弧度表角度

SELECT COS(3.14159265),SIN('3.14159265'),TAN(3.14159265) FROM DUAL;
4.png
  • 返回整数函数
    CEIL(n):返回结果大于或等于输入参数的最小整数;
    FLOOR(n):返回结果小于或等于输入参数的最大整数;
SELECT CEIL(100),CEIL('100.2'),CEIL(-9.2), FLOOR(-9.2) FROM DUAL;
5.png
  • 指数,对数函数

POWER(n1,n2):n1的n2次幂,如果n1为负数n2必须为整数;
SQRT(n):返回n的平方根,n不为负,当n为BINARY_FLOAT或BINARY_DOUBLE时,n<0返回NaN;
EXP(n):返回e的n次幂;
LOG(n1,n2):以n1为底n2的对数,n1为除1,0外的任意正数;
LN(n):返回n的自然对数;

SELECT POWER(2,3),SQRT(9),EXP(2),LOG(3,9),LN(4) FROM DUAL;
6.png
  • 四舍五入

ROUND(n,integer):将n四舍五入第二个参数指定的形式的十进制。参数integer要求是整数,若不是整数自动截取整数部分,当integer为整数,表示n被四舍五入到integer位小数,如果integer为负数,则你被四舍五入到小数点向左integer位;

SELECT ROUND(1.2345,2),ROUND(1.98765,2.3),ROUND(1234.2344,-2) FROM DUAL;
7.png
  • 数字截取

TRUNC(n,integer):将数字n按照integer的值进行截取,跟integer的正负有关,参数integer要求是整数,若不是整数自动截取整数部分,当integer为正整数,表示n截取到integer位小数,若integer为负数则截取到小数点左边第integer位,被截取的部分用0代替;

SELECT TRUNC(111.1234,3),TRUNC(111.1234,2.123),TRUNC(111.1234,-2) FROM DUAL;
8.png

2. 字符型函数

  • ASCII与字符型转换函数

CHR(n[USING NCHAR_CS]):根据相应的字符集,把ASCII码转换成字符;
ASCII(char):返回参数首字母的ASCII码;

SELECT CHR(65) ||CHR(66)||CHR(67) ABC,CHR(45679),ASCII('ABC') FROM DUAL;
9.png
  • 获取字符串长度函数

LENGTH(char):得到指定字符串长度,返回数字;

SELECT LENGTH('safsdfsdf士大夫胜多负少ASSDAS') FROM DUAL;
10.png
  • 字符串截取函数
{[SUBSTR]|[SUBSTRB]|[SUBSTRC]|[SUBSTR2]|[SUBSTR4]}(char,position[,substring_length])
-- SUBSTR: 以字符为单位;
-- SUBSTRB: 以字节为单位;
-- SUBSTRC: 以unicode字符为单位;
-- SUNSTR2: 以UCS2代码点为单位;
-- SUNSTR4: 以UCS4代码点为单位;
-- char: 原始字符串;
-- position: 要截取字符串的开始位置,初始为1,若为负数,表示从char的右边算起
-- substring_length: 要截取的长度;
SELECT SUBSTR('sdfghjhgfd',2,2),SUBSTR('asdfgh',-3,3) FROM DUAL;
11.png
  • 字符串连接函数

CONCAT(cahr1,char2): 连接两个参数并返回,效果等同于||

SELECT CONCAT('my' ,'123'), 'my'||'123' FROM DUAL;
12.png
  • 字符串搜索函数
{[INSTR]|[INSTRB]|[INSTRC]|[INSTR2]|[INSTR4]}(string,substring[,position[,occurrence]])
-- string: 待搜索字符串;
-- substring: 要搜索的字符串;
-- position: 搜索字符串的开始位置,初始为1,若为负数,表示从字符串的右边作为起始位置;
-- occurrence: substring第几次出现,默认是1;
SELECT INSTR('my apple','e'),INSTR('my apple','m',-1) FROM DUAL;
13.png
  • 字母大小写转换

UPPER(char): 将指定参数全部转化成大写
LOWER(char): 将指定参数全部转化成小写
INITCAP(char): 所有首字母转化成大写

SELECT UPPER('my apple') up,LOWER('MY APPLE') lower,INITCAP('my apple')  cap FROM DUAL;
14.png
  • 替换字符串函数
REPLACE(char,search_string[,replacement_string])
-- char: 表示搜索的目标字符串;
-- search_string: 在目标字符串中要搜索的字符串;
-- replacement_string: 可选参数,用来替换被搜索的字符串,若该参数为空,则在char中删除search_string;
SELECT REPLACE('my apple', 'pp','PP') FROM DUAL;
15.png
  • 字符串填充函数

RPAD(expr1,,[,expr2]): 在字符串expr1右边用expr2填充,直到字符串长度为n为止,若expr2不存在则以空格填充;
LPAD(expr1,,[,expr2]): 在字符串expr1左边用expr2填充,直到字符串长度为n为止,若expr2不存在则以空格填充;

SELECT RPAD('123',3,'a'), LPAD('456',12,'lpad') FROM DUAL;
16.png
  • 删除字符串首尾指定字符
TRIM([LEADING|TRAILING|BOTH][trim_character FROM]trim_source)
-- 删除指定的前缀或尾随字符,默认删除空格;
-- LEADING: 删除trim_source的前缀字符;
-- TRAILING:  删除trim_source的后缀字符;
-- BOTH:  删除trim_source的前缀和后缀字符;
-- trim_character: 删除指定字符,默认删除空格;
-- trim_source: 被操作的字符串;
RTRIM(char[,set]):删除char右边出现在set中的字符,set没有则删除空格;
LTRIM(char[,set]):删除char左边出现在set中的字符,set没有则删除空格;
SELECT TRIM(TRAILING 'l' FROM 'apple'), TRIM('       apple         '), RTRIM('my apple', 'ppl'), LTRIM('         my apple','a') FROM DUAL;
17.png

3. 日期函数

  • 系统日期时间函数

SYSDATE:该函数没有参数,获得系统当前日期;
SYSTIMESTAMP:返回系统时间戳;

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), SYSTIMESTAMP FROM DUAL;
18.png
  • 得到时区函数
SELECT DBTIMEZONE, SESSIONTIMEZONE FROM DUAL;
-- DBTIMEZONE: 数据库所在时区;
-- SESSIONTIMEZONE:当前会话所在时区
19.png
  • 为日期加上指定月份函数
SELECT 
TO_CHAR(ADD_MONTHS(TO_DATE('2018-1-30','YYYY-MM-DD'),1),'YYYY-MM-DD'),
TO_CHAR(ADD_MONTHS(TO_DATE('2018-1-30','YYYY-MM-DD'),-1),'YYYY-MM-DD') FROM DUAL;
20.png
  • 返回会话所在时区当前日期的函数
SELECT SESSIONTIMEZONE, TO_CHAR(CURRENT_DATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
21.png

4. 转换函数

  • 字符型转ASCII类型字符串函数
SELECT ASCIISTR('巅峰时代') FROM DUAL;
22.png
  • 二进制转十进制函数
SELECT BIN_TO_NUM(1), BIN_TO_NUM(1,0), BIN_TO_NUM(1,1,1,1,1,1,1,1) FROM DUAL;
23.png

5. NULL函数

  • 返回表达式为NULL的函数
SELECT COALESCE(NULL,9-1,NULL) FROM DUAL;
-- COALESCE(expr): 返回expr中第一个不未NULL的表达式的值,若全为NULL则返回NULL
24.png
  • 替换NULL值函数

NVL(expr1,expr2): 如果expr1为NULL,则返回expr2的值,否则返回expr1的值,要求两个参数类型一致;
NVL2(expr1,expr2,expr3): 如果expr1为NULL,则返回expr2的值,不为空返回expr3的值

6. 集合函数

  • 求平均值函数
AVG([distinct|all]expr)
-- distinct: 除去重复的值
-- all: 默认,包括所有值
-- expr: 表达式,只能是数值类型

-- 可以使用条件子句
  • 求记录数量函数
COUNT(*|[distinct|all]expr)
-- *: 表示计算所有记录
-- distinct: 除去重复的值
-- all: 默认,包括所有值
-- expr: 表达式,只能是数值类型

-- 可以使用条件子句
  • 返回最大\最小值函数
MAX|MIN([distinct|all]expr)
-- distinct: 除去重复的值
-- all: 默认,包括所有值
-- expr: 表达式,只能是数值类型

-- 可以使用条件子句
  • 求和函数
SUM([distinct|all]expr)
-- distinct: 除去重复的值
-- all: 默认,包括所有值
-- expr: 表达式,只能是数值类型

-- 可以使用条件子句

7. 其他函数

  • 返回登录名函数
SELECT USER FROM DUAL;
25.png
  • 返回会话以及上下文信息函数
USEREVN(parameter)
-- 返回当前会话信息

SYS_CONTEXT(namespace,parameter) 得到context
SELECT USERENV('ISDBA'), USERENV('Language') FROM DUAL;
26.png
  • 表达式匹配函数
DECODE(expr,search,result[,search1,result1][,default])
-- 当expr符合条件就返回result值,否则返回default

8. 比较杂乱的函数(知道有这种,用的时候再查吧)

  • 提取指定日期特定部分函数
  • 得到两个日期之间的月份数
  • 时区时间转化函数
  • 日期四舍五入、截取函数
  • 数据类型转化函数
  • 字符串和ROWID相互转化函数
  • 字符串在字符集间转化
  • 十六进制字符串与RAW类型相互转化
  • 数值转化成字符串类型
  • 字符串转日期类型函数
  • 字符串转数字函数
  • 全角转半角函数
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容