Oracle常用函数
Posted IVEGOTNOIDEA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle常用函数相关的知识,希望对你有一定的参考价值。
一、数学函数
ABS
(x) 返回x的绝对值;
BITAND(x,y) 返回对x,y进行位与(
AND
)操作的结果;
CEIL(x) 返回大于或等于x的最小整数(注意负数);
FLOOR(x) 返回小于或等于x的最大整数;
EXP(x) 返回e的x次幂,其中e约为2.71828183;
LN(x) 返回x的自然对数;
LOG(x,y) 返回以x为底y的对数;
POWER(x,y) 返回x的y次幂;
SQRT(x) 返回x的平方根
; MOD(x,y) 返回x除以y的余数;
SIGN(x) 返回x的符号;
ROUND(x[,y]) 返回对x取整的结果。y为可选参数,说明对第几位小数处取整。没有指定y的时候
则对x的0位小数取整;如果是负数,则对x在小数点的左边的第|y|位取整。此函数是四舍五入取整 TRUNC(x[,y]) 与ROUND类似,之不过是直接舍去尾数
二、聚合函数
AVG(DISTINCT|ALL) 求平均值;
MAX(DISTINCT|ALL) 求最大值;
MIN(DISTINCT|ALL) 求最小值;
STDDEV(distinct|all) 求标准差;
VARIANCE(DISTINCT|ALL) 求协方差;
SUM(DISTINCT|ALL) 求和;
COUNT(DISTINCT|ALL) 求记录、数据个数;
MEDIAN() 求中位数;
三、日期函数
SYSDATE 用来得到系统的当前日期
ADD_MONTHS 增加或减去月份
LAST_DAY 返回日期的最后一天
MONTHS_BETWEEN(date2,date1) 给出date2-date1的月份
NEW_TIME(date,‘this‘,‘that‘) 给出在this时区=other时区的日期和时间
简写 时区
AST OR ADT 大西洋标准时间
HST OR HDT 阿拉斯加—夏威夷时间
BST OR BDT 英国夏令时
MST OR MDT 美国山区时间
CST OR CDT 美国中央时区
NST 新大陆标准时间
EST OR EDT 美国东部时间
PST OR PDT 太平洋标准时间
GMT 格伦威治标准时间
YST OR YDT Yukon标准时间
NEXT_DAY 返回与制定日期在同一个星期或之后一个星期内的,你所要求的星期天数的确切日期。
星期日 = 1 星期一 = 2 星期二 = 3 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7
CURRENT_DATE 当前会话时区中的当前日期
CURRENT_TIMESTAMP 以timestamp with time zone数据类型返回当前会话时区中的当前日期
DBTIMEZONE() 返回时区
SESSIONTIMEZONE 返回回话时区 其中DBTIMEZONE是数据库的,session是针对当前会话的,因为时区在会话级可以改变
EXTRACT 找出日期或间隔值的字段值
LOCALTIMESTAMP 返回会话中的日期和时间
TRUNC(for dates) TRUNC函数为指定元素而截去的日期值。
---- 上月最后一天
SELECT TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), ‘YYYY/MM/DD‘) FROM DUAL;
----: 上个月的今天
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), ‘YYYY-MM-DD‘) FROM DUAL;
---- 上个月第一天
SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE)+1,-2),‘YYYY-MM-DD‘) FirstDay FROM DUAL;
--- 按照每周进行统计
SELECT TO_CHAR(SYSDATE, ‘WW‘) FROM DUAL;
--- 按照每月进行统计
SELECT TO_CHAR(SYSDATE, ‘MM‘) FROM DUAL;
---- 按照每季度进行统计
SELECT TO_CHAR(SYSDATE, ‘Q‘) FROM DUAL;
--- 按照每年进行统计
SELECT TO_CHAR(SYSDATE, ‘YYYY‘) FROM DUAL;
格式化日期函数:
Q 季度,1~3月为第一季度
SELECT TO_CHAR(SYSDATE, ‘Q‘) FROM DUAL; -- 2表示第二季度
MM 月份数
SELECT TO_CHAR(SYSDATE, ‘MM‘) FROM DUAL; --04表示4月
RM 月份的罗马表示
SELECT TO_CHAR(SYSDATE, ‘RM‘) FROM DUAL; --IV表示4月
Month 用9个字符长度表示的月份名
SELECT TO_CHAR(SYSDATE, ‘MONTH‘) FROM DUAL; -- 4月
WW 当年第几周
SELECT TO_CHAR(SYSDATE, ‘WW‘) FROM DUAL; -- 24表示2002年6月13日为第24周
W 本月第几周
SELECT TO_CHAR(SYSDATE, ‘W‘) FROM DUAL; -- 2011年04月26日为第4周
DDD 当年第几天. 1月1日为001,2月1日为032
SELECT TO_CHAR(SYSDATE, ‘DDD‘) FROM DUAL;
DD 当月第几天
SELECT TO_CHAR(SYSDATE, ‘DD‘) FROM DUAL;
D 周内第几天
SELECT TO_CHAR(SYSDATE, ‘D‘) FROM DUAL;
DY 周内第几天缩写
SELECT TO_CHAR(SYSDATE, ‘DY‘) FROM DUAL;
HH或HH12 12进制小时数
SELECT TO_CHAR(SYSDATE, ‘HH‘) FROM DUAL;
HH24 24小时制
SELECT TO_CHAR(SYSDATE, ‘HH24‘) FROM DUAL;
MI 分钟数(0~59)
SELECT TO_CHAR(SYSDATE, ‘MI‘) FROM DUAL;
提示注意不要将MM格式用于分钟(分钟应该使用MI)。MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。
SS 秒数(0~59)
SELECT TO_CHAR(SYSDATE, ‘SS‘) FROM DUAL;
四、字符函数
ASCII(str) 返回字符串的ASCII值
CHR(x) 返回整数所对应的ASCII字符
CONCAT(A,B) 连接字符串A和字符串B
如果要连接表里面的两个字段可以用||
INITCAP 返回字符串并将字符串的第一个字母变为大写;
LENGTH 返回字符串的长度;
返回表某条数据某个列实际长度,如果该表没有数据,返回0
LOWER 返回字符串,并将所有的字符小写
UPPER 返回字符串,并将所有的字符大写
LTRIM(X,[TRIM_STRING]) 删除X左边出现的字符串TRIM_STRING, 默认为空字符串
RTRIM(X, [TRIM_STRING]) 删除右边出现的字符串TRIM_STRING,默认为空字符串。
SUBSTR(string,start,count) 取子字符串,从start开始,取count个
INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1
RPAD(str,X,str1) 在str的右边粘贴字符str1
注意长度值X并不是粘贴字符的长度,而是整个字符串的长度,如果长度小于原始字符串取原始字符串前X位
LPAD(str,X,str1) 在str的左边粘贴字符str1
注意的问题同上
REPLACE(‘string‘,‘s1‘,‘s2‘) 将string中的字符串s1替换为字符串s2
SOUNDEX 返回一个与给定的字符串读音相同的字符串
TRIM(‘s‘ from ‘string‘) 裁剪字符,将s从string中裁剪出去
LEADING 剪掉前面的字符
TRAILING 剪掉后面的字符
如果不指定,默认为空格符
NVL(X, VALUE) 如果X是空值,返回VALUE,否则返回X
NVL2(X, VALUE1, VALUE2) 如果X是空值,返回VALUE1, 否则返回VALUE2
NANVI(X, VALUE) 如果X不是数字,那么返回VALUE,否则返回X
五、转换函数
TO_CHAR(DATE,‘FORMAT‘) 把对应的数据转换为字符串类型
TO_DATE(STRING,‘FORMAT‘) 将字符串转化为ORACLE中的一个日期
TO_NUMBER(str) 将给出的字符转换为数字
RUNC(for number) 按照指定的精度截取一个数
TRUNC(number[,decimals]) 返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
number 待做截取处理的数值
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分
CHARTOROWID 把包含外部格式的ROWID的CHAR或VARCHAR2数值转换为内部的二进制格式.参数string必须是包含外部格式的ROWID的18字符的字符串.
ROWIDTOCHAR 将ROWID数据类型转换为字符类型,将ROWID类型的数值rowid转换为其外部的18字符的字符串表示。
CONVERT(c,dset,sset) 将源字符串 sset从一个语言字符集转换到另一个目的dset字符集
HEXTORAW(x) 将一个十六进制构成的字符串x转换raw
RAWTOHEX 将RAW类数值rawvalue转换为一个相应的十六进制表示的字符串. rawvalue中的每个字节都被转换为一个双字节的字符串. RAWTOHEX和HEXTORAW是两个相反的函数.
TO_MULTI_BYTE 将字符串中的单字节字符转化为多字节字符即将指定字符转换为全角并返回char类型字串
DUMP(s,fmt,start,length) DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值
fmt含4种格式:8||10||16||17,分别表示8进制,10进制,16进制和单字符,默认为10进制。start参数表示开始位置,length表示字串数长度。
EMPTY_BLOB(),EMPTY_CLOB() 这两个函数都是用来对大数据类型字段进行初始化操作的函数
六、控制流函数(常用在PL/SQL语句中)
流程控制:
IF (表达式) then 执行的语句 end if; (end if :结束IF) 判断满足一种情况的条件
IF (表达式) then 执行的语句 else 执行的语句 end if; 判断满足两种情况的条件
IF (表达式) then 执行的语句 elseif 执行的语句 elseif 执行的语句 .... end if; 判断满足多种情况的 条件
Case (表达式) when (条件表达式结果1 )then 执行语句1 when(条件表达式结果2) then 执行的语句 2 else 执行的语句 n end Caase; (end case 结束 Case)
Case when (条件表达式1) then 执行语句1 when (条件表达式2) then 执行语句2 else 执行语句n end case;
循环控制:
LOOP 语句段; exit [when/if 条件表达式] end Loop; 至少执行一次 相当于 do{} while(条件表达式);当满足when/if条件时,使用exit退出,否则,end Loop;
while 条件表达式 LOOP 执行语句 end LOOP ; 只有条件表达式 为 true时候就会运行;
for 循环变量 IN [reverse] 初始值表达式 ... 终值表达式 LOOP 执行语句 END LOOP
PS:因作者能力有限,如有误还请谅解;
以上是关于Oracle常用函数的主要内容,如果未能解决你的问题,请参考以下文章