Oracle通过日期获取星座函数
oracle最全函数大全(分析函数-聚合函数-转换函数-日期型函数-字符型函数-数值型函数-其他函数)

oracle函数大全(分析函数,聚合函数,转换函数,日期型函数,字符型函数,数值型函数,其他函数)oracle函数大全 (1)oracle分析函数--SQL*PLUS环境 (1)oracle 10g函数大全--聚合函数 (19)oracle 10g函数大全--转换函数 (23)oracle 10g函数大全--日期型函数 (40)oracle 10g函数大全--字符型函数 (45)oracle 10g函数大全--数值型函数 (55)oracle 10g函数大全--其他函数 (58)oracle分析函数--SQL*PLUS环境一、总体介绍1.1.分析函数如何工作语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 <ASC DESC> <NULLS FIRST NULLS LAST>> <WINDOWING子句>) PARTITION子句ORDER BY子句 WINDOWING子句缺省时相当于RANGE UNBOUNDED PRECEDING1. 值域窗(RANGE WINDOW)RANGE N PRECEDING 仅对数值或日期类型有效,选定窗为排序后当前行之前,某列(即排序列)值大于/小于(当前行该列值–/+ N)的所有行,因此与ORDER BY子句有关系。
2. 行窗(ROW WINDOW)ROWS N PRECEDING 选定窗为当前行及之前N行。
还可以加上BETWEEN AND 形式,例如RANGE BETWEEN m PRECEDING AND n FOLLOWING 函数 AVG(<distinct all> eXPr)一组或选定窗中表达式的平均值 CORR(expr, expr) 即COVAR_POP(exp1,exp2) / (STDDEV_POP(expr1) * STDDEV_POP(expr2)),两个表达式的互相关,-1(反相关) ~1(正相关),0表示不相关COUNT(<distinct> <*> <expr>) 计数COVAR_POP(expr, expr) 总体协方差COVAR_SAMP(expr, expr) 样本协方差CUME_DIST 累积分布,即行在组中的相对位置,返回0 ~ 1DENSE_RANK 行的相对排序(与ORDER BY搭配),相同的值具有一样的序数(NULL计为相同),并不留空序数FIRST_VALUE 一个组的第一个值LAG(expr, <offset>, <default>) 访问之前的行,OFFSET是缺省为1 的正数,表示相对行数,DEFAULT是当超出选定窗范围时的返回值(如第一行不存在之前行)LAST_VALUE 一个组的最后一个值LEAD(expr, <offset>, <default>) 访问之后的行,OFFSET是缺省为1 的正数,表示相对行数,DEFAULT是当超出选定窗范围时的返回值(如最后行不存在之前行)MAX(expr) 最大值MIN(expr) 最小值NTILE(expr) 按表达式的值和行在组中的位置编号,如表达式为4,则组分4份,分别为1 ~ 4的值,而不能等分则多出的部分在值最小的那组PERCENT_RANK 类似CUME_DIST,1/(行的序数 - 1)RANK 相对序数,答应并列,并空出随后序号RATIO_TO_REPORT(expr) 表达式值 / SUM(表达式值)ROW_NUMBER 排序的组中行的偏移STDDEV(expr) 标准差STDDEV_POP(expr) 总体标准差STDDEV_SAMP(expr) 样本标准差SUM(expr) 合计VAR_POP(expr) 总体方差VAR_SAMP(expr) 样本方差VARIANCE(expr) 方差REGR_ xxxx(expr, expr) 线性回归函数REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2) REGR_INTERCEPT:返回回归线的y截距,等于AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)REGR_COUNT:返回用于填充回归线的非空数字对的数目REGR_R2:返回回归线的决定系数,计算式为:If VAR_POP(expr2) = 0 then return NULLIf VAR_POP(expr1) = 0 and VAR_POP(expr2) != 0 then return 1If VAR_POP(expr1) > 0 and VAR_POP(expr2 != 0 thenreturn POWER(CORR(expr1,expr),2)REGR_AVGX:计算回归线的自变量(expr2)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr2)REGR_AVGY:计算回归线的应变量(expr1)的平均值,去掉了空对(expr1, expr2)后,等于AVG(expr1)REGR_SXX:返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr2)REGR_SYY:返回值等于REGR_COUNT(expr1, expr2) * VAR_POP(expr1)REGR_SXY: 返回值等于REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2) 首先:创建表及接入测试数据create table students(id number(15,0),area varchar2(10),stu_type varchar2(2),score number(20,2));insert into students values(1, '111', 'g', 80 );insert into students values(1, '111', 'j', 80 );insert into students values(1, '222', 'g', 89 );insert into students values(1, '222', 'g', 68 );insert into students values(2, '111', 'g', 80 );insert into students values(2, '111', 'j', 70 );insert into students values(2, '222', 'g', 60 );insert into students values(2, '222', 'j', 65 );insert into students values(3, '111', 'g', 75 );insert into students values(3, '111', 'j', 58 );insert into students values(3, '222', 'g', 58 );insert into students values(3, '222', 'j', 90 );insert into students values(4, '111', 'g', 89 );insert into students values(4, '111', 'j', 90 );insert into students values(4, '222', 'g', 90 );insert into students values(4, '222', 'j', 89 ); commit;二、具体应用:1、分组求和:1.2.GROUP BY子句1.2.1.GROUPING SETSselect id,area,stu_type,sum(score) scorefrom studentsgroup by grouping sets((id,area,stu_type),(id,area),id) order by id,area,stu_type;/*--------理解grouping setsselect a, b, c, sum( d ) from tgroup by grouping sets ( a, b, c )等效于select * from (select a, null, null, sum( d ) from t group by a union allselect null, b, null, sum( d ) from t group by b union allselect null, null, c, sum( d ) from t group by c )*/1.2.2.ROLLUPselect id,area,stu_type,sum(score) scorefrom studentsgroup by rollup(id,area,stu_type)order by id,area,stu_type;1.2.3.rollupselect a, b, c, sum( d )from tgroup by rollup(a, b, c);等效于select * from (select a, b, c, sum( d ) from t group by a, b, c union allselect a, b, null, sum( d ) from t group by a, b union allselect a, null, null, sum( d ) from t group by a union allselect null, null, null, sum( d ) from t)*/1.2.4.CUBEselect id,area,stu_type,sum(score) scorefrom studentsgroup by cube(id,area,stu_type)order by id,area,stu_type;/*--------理解cubeselect a, b, c, sum( d ) from tgroup by cube( a, b, c)等效于select a, b, c, sum( d ) from tgroup by grouping sets(( a, b, c ),( a, b ), ( a ), ( b, c ),( b ), ( a, c ), ( c ),() )*/1.2.5.GROUPING/*从上面的结果中我们很容易发现,每个统计数据所对应的行都会出现null,如何来区分到底是根据那个字段做的汇总呢,grouping函数判断是否合计列!*/select decode(grouping(id),1,'all id',id) id,decode(grouping(area),1,'all area',to_char(area)) area,decode(grouping(stu_type),1,'all_stu_type',stu_type) stu_type, sum(score) scorefrom studentsgroup by cube(id,area,stu_type)order by id,area,stu_type;1.3.OVER()函数的使用1.3.1.统计名次1.3.1.1.D ENSE_RANK(),允许并列名次、名次不间断,如122344456将score按ID分组排名:dense_rank() over(partition by id order by score desc)将score不分组排名:dense_rank() over(order by score desc)select id,area,score,dense_rank() over(partition by id order by score desc) 分组id排序, dense_rank() over(order by score desc) 不分组排序from students order by id,area;1.3.1.2.R OW_NUMBER(),不允许并列名次、相同值名次不重复,结果如123456……将score按ID分组排名:row_number() over(partition by id order by score desc)将score不分组排名:row_number() over(order by score desc)select id,area,score,row_number() over(partition by id order by score desc) 分组id排序,row_number() over(order by score desc) 不分组排序from students order by id,area;1.3.1.3.r ank(),允许并列名次、复制名次自动空缺,结果如12245558……将score按ID分组排名:rank() over(partition by id order by score desc) 将score不分组排名:rank() over(order by score desc)select id,area,score,rank() over(partition by id order by score desc) 分组id排序,rank() over(order by score desc) 不分组排序from students order by id,area;1.3.1.4.c ume_dist(),名次分析——-最大排名/总个数函数:cume_dist() over(order by id)select id,area,score,cume_dist() over(order by id) a, --按ID最大排名/总个数cume_dist() over(partition by id order by score desc) b, --ID分组中,scroe最大排名值/本组总个数row_number() over (order by id) 记录号from students order by id,area;1.3.1.5.c ume_dist(),允许并列名次、复制名次自动空缺,取并列后较大名次,结果如22355778……将score按ID分组排名:cume_dist() over(partition by id order by score desc)*sum(1) over(partition by id)将score不分组排名:cume_dist() over(order by score desc)*sum(1) over() select id,area,score,sum(1) over() as 总数,sum(1) over(partition by id) as 分组个数,(cume_dist() over(partition by id order by score desc))*(sum(1)over(partition by id)) 分组id排序,(cume_dist() over(order by score desc))*(sum(1) over()) 不分组排序from students order by id,area1.3.1.6.s um(),max(),avg(),RATIO_TO_REPORT()--分组统计select id,area,sum(1) over() as 总记录数,sum(1) over(partition by id) as 分组记录数,sum(score) over() as 总计 ,sum(score) over(partition by id) as 分组求和,sum(score) over(order by id) as 分组连续求和,sum(score) over(partition by id,area) as 分组ID和area求和,sum(score) over(partition by id order by area) as 分组ID并连续按area求和,max(score) over() as 最大值,max(score) over(partition by id) as 分组最大值,max(score) over(order by id) as 分组连续最大值,max(score) over(partition by id,area) as 分组ID和area求最大值,max(score) over(partition by id order by area) as 分组ID并连续按area求最大值,avg(score) over() as 所有平均,avg(score) over(partition by id) as 分组平均,avg(score) over(order by id) as 分组连续平均,avg(score) over(partition by id,area) as 分组ID和area平均,avg(score) over(partition by id order by area) as 分组ID并连续按area平均,RATIO_TO_REPORT(score) over() as "占所有%",RATIO_TO_REPORT(score) over(partition by id) as "占分组%",score from students;3、LAG(COL,n,default)、LEAD(OL,n,default) --取前后边N条数据取前面记录的值:lag(score,n,x) over(order by id)取后面记录的值:lead(score,n,x) over(order by id)参数:n表示移动N条记录,X表示不存在时填充值,iD表示排序列select id,lag(score,1,0) over(order by id) lg,score from students; select id,lead(score,1,0) over(order by id) lg,score from students;4、FIRST_VALUE()、LAST_VALUE()取第起始1行值:first_value(score,n) over(order by id)取第最后1行值:LAST_value(score,n) over(order by id)select id,first_value(score) over(order by id) fv,score from students; select id,last_value(score) over(order by id) fv,score from students;sum(...) over ...【功能】连续求和分析函数【参数】具体参示例【说明】Oracle分析函数NC示例:select bdcode,sum(1) over(order by bdcode) aa from bd_bdinfo【示例】1.原表信息: SQL> break on deptno skip 1 -- 为效果更明显,把不同部门的数据隔段显示。
ORACLE常用函数汇总

ORACLE常用函数汇总Oracle是一种常用的关系型数据库管理系统,它提供了许多方便的函数来处理和操作数据。
以下是一些常用的Oracle函数的汇总:1.字符串函数:-CONCAT:用于连接两个字符串。
-UPPER:将字符串转换为大写。
-LOWER:将字符串转换为小写。
-LENGTH:返回字符串的长度。
-SUBSTR:返回字符串的子串。
2.数值函数:-ABS:返回数字的绝对值。
-ROUND:返回一个四舍五入的数字。
-TRUNC:返回数字的整数部分。
-MOD:返回两个数的余数。
3.日期函数:-SYSDATE:返回当前日期和时间。
-TO_CHAR:将日期转换为特定的格式。
-TO_DATE:将字符串转换为日期。
-ADD_MONTHS:在给定的日期上添加指定的月份。
-MONTHS_BETWEEN:返回两个日期之间的月份数。
4.聚合函数:-SUM:计算指定列的总和。
-AVG:计算指定列的平均值。
-COUNT:计算指定列的行数。
-MAX:返回指定列的最大值。
-MIN:返回指定列的最小值。
5.条件函数:-NVL:用于将空值替换为指定的值。
-NULLIF:如果两个表达式相等,则返回空值;否则返回第一个表达式的值。
-COALESCE:返回第一个非空表达式的值。
-CASE:对满足条件的表达式进行分支处理。
6.集合函数:-UNION:将两个结果集合并成一个结果集。
-INTERSECT:返回两个结果集的交集。
-MINUS:返回第一个结果集中不在第二个结果集中的行。
7.窗口函数:-ROW_NUMBER:为查询结果中的每一行分配一个唯一的行号。
-RANK:根据指定的列对结果进行排序,并为相同值的行分配相同的排名。
-DENSE_RANK:根据指定的列对结果进行排序,并为相同值的行分配连续的排名。
8.系统函数:-USER:返回当前用户的名称。
-CURRENT_TIMESTAMP:返回当前的日期和时间。
-SYSTIMESTAMP:返回当前的日期和时间,包括时区信息。
Oracle日期函数简介

Oracle⽇期函数简介Oracle⽇期函数⽤于对Oracle数据库中的⽇期及时间进⾏处理,下⾯就为您详细介绍Oracle⽇期函数的⽤法,希望对您能有所启迪。
(1)SYSDATE和TRUNC两个Oracle⽇期函数取Oracle服务器系统的⽇期和截掉⼩数部分的功能。
观察以下操作:create table test_date (name varchar2(20), p_date date);insert into test_date values(‘name1',sysdate);select * from test_date;select * from test_date where p_date='25-10⽉-05‘;select * from test_date where trunc(p_date)= '25-10⽉-05‘;Oracle系统中⽤SYSDATE取得的不仅包含⽇期⽽且还包含的有时间信息,时间信息实际上就是表⽰儒略⽇数据中的⼩数部分。
(2)ADD_MONTHSOracle⽇期函数返回⼀个具有与所提供⽇期相差⽉份的⽇期,函数中给出了未来或以前的⽉份数。
语法如下:ADD_MONTHS(起始⽇期,增减⽉数)select add_months('26-10⽉-05‘,2) from dual;select add_months('26-10⽉-05‘,-2) from dual;(3)LAST_DAY返回包含给定⽇期的那个⽉的最后⼀天。
语法为:LAST_DAY(⽇期)select last_day('21-2⽉-80‘) from dual;(4)MONTHS_BETWEEN返回两个⽇期间的⽉份。
语法为:MONTHS_BETWEEN(较晚⽇期,较早⽇期)select months_between('12-10⽉-05‘,'12-9⽉-03‘) from dual;以下是⼀些补充资料,虽然有点仄,但参考下吧在oracle中有很多关于⽇期的函数,如:1、add_months()⽤于从⼀个⽇期值增加或减少⼀些⽉份 date_value:=add_months(date_value,number_of_months) 例: SQL> select add_months(sysdate,12) Next Year from dual; Next Year ---------- 13-11⽉-04 SQL> select add_months(sysdate,112) Last Year from dual; Last Year ---------- 13-3⽉ -13 SQL>2、current_date()返回当前会放时区中的当前⽇期 date_value:=current_date SQL> column sessiontimezone for a15 SQL> select sessiontimezone,current_date from dual; SESSIONTIMEZONE CURRENT_DA --------------- ---------- +08:00 13-11⽉-03 SQL> alter session set time_zone=-11:00 2 / 会话已更改。
Oracle日期处理函数+常用函数示例

Oracle⽇期处理函数+常⽤函数⽰例时间相关应⽤⽰例————select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;——2019-10-21 14:34:15select to_char(sysdate,'ddd-day-dy-Q-WW-W') from dual;——294-星期⼀-4-42-3(当年第⼏天-星期⼏-星期⼏缩写-第⼏季度-当年第⼏周-当⽉第⼏周)select to_date('2019-10-21 14:34:15','yyyy-mm-dd hh24:mi:ss') from dual;——字符转换为⽇期格式select to_char (sysdate, 'yy-mm-dd-day-dy', 'NLS_DATE_LANGUAGE = American') from dual;——19-10-21-monday -mon (以英⽂显⽰⽇期)select * from nls_session_parameters;——查看系统⽀持的⽇期格式select to_number(sysdate - (sysdate-1))*24*60*60*1000 from dual;——86400000(相差多少天、时、分、秒、毫秒,相应增删乘数即可)select to_date(null) from dual;——如果时间为null,那么null也要转换为时间格式select to_char(add_months(trunc(sysdate),-1),'yyyy-mm') from dual;——2019-09(上个⽉)select last_day(add_months(trunc(sysdate),-1)) from dual;——2019/9/30(当⽉最后⼀天)select to_char(trunc(add_months(trunc(sysdate),-1),'month'),'yyyy-mm-dd HH24:MI:SS') from dual;——2019-09-01 00:00:00(上个⽉第⼀天)select next_day(sysdate,7) from dual;——2019/10/26 15:16:43(从输⼊⽇期得当下个星期天的⽇期,7可以换成其他星期数)select months_between(to_date('2014-3-21','yyyy-mm-dd'), to_date('2014-3-20','yyyy-mm-dd')) months from dual;——0.032258064516129(两个⽉差)select extract(month from sysdate) from dual;——10(截取时间戳的某个字段,语法为extract(year|month|day|hour|minute|second from column_name))select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual;——365(计算当年有多少天)select to_char(last_day(to_date('02','mm')),'yyyy-mm-dd') from dual;——2019-02-28(获取当年2⽉最后⼀天信息,判断是否闰年)时间常⽤函数总结:select SYSDATE from dual;——2019/10/21 16:07:37(获取系统时间)Select last_day(sysdate) from dual;——2019/10/31 16:09:19(获取输⼊date类型的最后⼀天)Select add_months(sysdate,2) from dual;——2019/12/21 16:12:29(左参数⽇期,右参数当前⽉份加减数,获取相差⽉份的⽇期)select months_between(sysdate,to_date('2019-09-12','yyyy-mm-dd'))from dual;——1.31224499701314(⽇期相差的⽉份)SELECT next_day(sysdate,2) FROM dual;——2019/10/28 16:20:17(下周2⽇期)select sessiontimezone,current_date from dual;——+08:00,2019/10/21 16:21:53(返回时区和当前会话时区中的当前⽇期)select extract(month from sysdate) "This Month" from dual;——10(按规则得到时间字段,extract(year|month|day|hour|minute|second from column_name) = value)SELECT TRUNC (SYSDATE, 'DD'),TRUNC (SYSDATE, 'MM'),TRUNC (SYSDATE, 'yyyy'),TRUNC (SYSDATE, 'day'),TRUNC (SYSDATE, 'q') FROM DUAL ;——(截取:当天、本⽉第⼀天、本年第⼀天、本周第⼀天、本季度第⼀天;另外还可以截取时分秒)其他常⽤函数总结:select concat('010-','88888888') from dual;——010-********(连接字符串,oracle的concat函数不能连接超过两个,三个及以上需要嵌套使⽤,或者⽤管道符||进⾏连接)select substr('12345',3,2) from dual——34(截取字符串,下标基1,从3开始截取两个字符);select instr('oracle traning','ra',1,2) from dual;——9(从1开始查找第2个出现的'ra'字符串,返回下标,若找不到则返回0)select initcap('smith hEllo') from dual;——Smith Hello(格式化字符串,使单词⾸字符⼤⼩,其余⼩写)select lpad(rpad('gao',10,'*'),17,'*')from dual;——*******gao*******(在指定字符的左或右拼接指定符号,使总长度达到指定的数字)select replace('he love you','he','I') from dual;——I love you(⽤指定字符替换相应字符)select trim('a' from 'abacda') from dual;——bacd(⽤单字符删除⾸尾第⼀个字符,若匹配则删除)select trim(' abacd ') from dual;——(删除⾸位空格)select ceil(3.1415927) from dual;——4(取整,⼤于⾃⾝)select floor(3.1415927) from dual;——3(取整,不⼩于⾃⾝)select round(55.655, 2) from dual;——55.66(四舍五⼊取整,保留⼩数点右边两位,若是负数则保留⼩数点左边)select trunc (55.655, 2) from dual;——(截取,只舍不⼊)select abs(-100) from dual;——100(获取绝对值)SELECT LENGTH (' ') FROM DUAL;——(返回字符串长度,空则为空)select lower('AaBbCcDd') from dual;——(变⼩写)select upper('AaBbCcDd') from dual;——(变⼤写)select ASCII('s') from dual;——(返回字符的⼗进制ascii码)select xm from table1 where soundex(xm)=soundex('weather');——(查找发⾳类似的字符串)select mod(10,3) from dual;——1(求余数)select power(3,3) from dual;——27(求次⽅)select sign(123),sign(-100),sign(0) from dual;——1,-1,0(检查正负)select sqrt(64),sqrt(10) from dual;——(计算平⽅根)Select ASCIISTR ('中国') from dual;——(转换数据库字符集的ASCII码)Select decode('a','⾦',1,'银',2,0) from dual;——0(⽤a跟后⾯参数进⾏⽐对,如果是⽐对成功就显⽰该值,否则显⽰默认值0)Select nullif('a', 'b') from dual;——a(⽐较两个表达式,相等返回null,否则返回第⼀个结果)Select nvl(null,0) from dual;——0(如果第⼀个参数为空,则返回第⼆个参数)Select nvl2(null,1,0) from dual;——0(不为空则返回第⼆个参数,为空则返回第三个参数)分组统计函数:AVG([DISTINCT|ALL]col)——求平均值COUNT(*|[DISTINCT|ALL] col)——求总数MAX([DISTINCT|ALL]col)——求最⼤值MIN([DISTINCT|ALL]col)——求最⼩值SUM([DISTINCT|ALL]col)——求和获取数据库信息:SELECT SYS_CONTEXT ('USERENV', 'TERMINAL') 客户端名称,SYS_CONTEXT ('USERENV', 'LANGUAGE') 客户端语⾔,SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid,SYS_CONTEXT ('USERENV', 'INSTANCE') instance,SYS_CONTEXT ('USERENV', 'ENTRYID') entryid,SYS_CONTEXT ('USERENV', 'ISDBA') isdba,SYS_CONTEXT ('USERENV', 'NLS_TERRITORY') 地区,SYS_CONTEXT ('USERENV', 'NLS_CURRENCY') 货币,SYS_CONTEXT ('USERENV', 'NLS_CALENDAR') nls_calendar,SYS_CONTEXT ('USERENV', 'NLS_DATE_FORMAT') 时间格式,SYS_CONTEXT ('USERENV', 'NLS_DATE_LANGUAGE') 时间语⾔,SYS_CONTEXT ('USERENV', 'NLS_SORT') nls_sort,SYS_CONTEXT ('USERENV', 'CURRENT_USER') current_user,SYS_CONTEXT ('USERENV', 'CURRENT_USERID') current_userid,SYS_CONTEXT ('USERENV', 'SESSION_USER') session_user,SYS_CONTEXT ('USERENV', 'SESSION_USERID') session_userid,SYS_CONTEXT ('USERENV', 'PROXY_USER') proxy_user,SYS_CONTEXT ('USERENV', 'PROXY_USERID') proxy_userid,SYS_CONTEXT ('USERENV', 'DB_DOMAIN') db_domain,SYS_CONTEXT ('USERENV', 'DB_NAME') 数据库名称,SYS_CONTEXT ('USERENV', 'HOST') 客户端完成名称,SYS_CONTEXT ('USERENV', 'OS_USER') 客户端⽤户,SYS_CONTEXT ('USERENV', 'EXTERNAL_NAME') external_name,SYS_CONTEXT ('USERENV', 'IP_ADDRESS') 客户端IP地址,SYS_CONTEXT ('USERENV', 'NETWORK_PROTOCOL') ⽹络协议,SYS_CONTEXT ('USERENV', 'BG_JOB_ID') bg_job_id,SYS_CONTEXT ('USERENV', 'FG_JOB_ID') fg_job_id,SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE') authentication_type, SYS_CONTEXT ('USERENV', 'AUTHENTICATION_DATA') authentication_data FROM DUAL;select user from dual;——查询当前数据库的登录⽤户名select userenv('language') from dual;——返回当前地区、语⾔和字符集select vsize('中') from dual;——获取内部表⽰的字节数。
ORACLE函数记录,自定义日历周获取周数

ORACLE函数记录,⾃定义⽇历周获取周数函数:⾃定义⽇历周获取周数功能说明:计算某⽇期是⼀年的第⼏周,⽀持⾃定义⽇历周,将任意周内星期设为⼀周起始⽇。
参数说明:currentDate为⽬标⽇期,weekStandard为⾃定义⼀周开端。
注:可将任意周⽇、周⼀、周⼆...设为⼀周开头,参数取值范围为1~7,周⼀⽤1表⽰,周⼆⽤2表⽰,以此类推。
具体sql如下:CREATE OR REPLACE function GetWeekNum(currentDate IN date,weekStandard IN varchar2) return varchar2asfirstDayWeekNo NUMBER; --本年1号周⼏(以⽇历为基础,周⼀为第⼀天)fisrtWeekDayCount NUMBER; --本年第⼀周天数(以weekNo为标准)dayCount NUMBER; --总天数weekCount NUMBER; --总周数beginif currentDate is null or weekStandard is null or weekStandard < 1 or weekStandard > 7thenreturn null;end if;firstDayWeekNo := to_char(trunc(currentDate,'y'),'d','NLS_DATE_LANGUAGE=AMERICAN')-1;if firstDayWeekNo = 0thenfirstDayWeekNo := 7;end if;if weekStandard = firstDayWeekNothenif(currentDate = trunc(currentDate,'y'))thenfisrtWeekDayCount := 1;elsefisrtWeekDayCount := 7;end if;elsif weekStandard < firstDayWeekNothenfisrtWeekDayCount := 7-(firstDayWeekNo-weekStandard);elsif weekStandard > firstDayWeekNothenfisrtWeekDayCount := (weekStandard - firstDayWeekNo);end if;dayCount := to_char(currentDate,'ddd');weekCount := ceil((dayCount-fisrtWeekDayCount)/7)+1;return to_char(currentDate,'YYYY')||to_char(weekCount,'FM00');end;。
oracle sql常用函数

oracle sql常用函数Oracle SQL中有许多常用的函数,它们可以用于数据处理、计算和转换。
以下是一些常用的Oracle SQL函数:1. 字符串函数:`SUBSTR(str, start, length)`: 返回字符串str中从start位置开始的长度为length的子串。
`UPPER(str)`: 将字符串str转换为大写。
`LOWER(str)`: 将字符串str转换为小写。
`INSTR(str, substr)`: 返回子串substr在字符串str中第一次出现的位置。
2. 数值函数:`ROUND(num, decimal_places)`: 对num进行四舍五入,保留decimal_places位小数。
`TRUNC(num, decimal_places)`: 对num进行截断,保留decimal_places位小数。
`MOD(n, m)`: 返回n除以m的余数。
3. 日期函数:`SYSDATE`: 返回当前日期和时间。
`TO_CHAR(date, format)`: 将日期date按照指定的格式转换为字符串。
`MONTHS_BETWEEN(date1, date2)`: 返回date1和date2之间相差的月数。
4. 转换函数:`TO_NUMBER(str)`: 将字符串str转换为数值型。
`TO_DATE(str, format)`: 将字符串str按照指定的格式转换为日期型。
5. 聚合函数:`SUM(column)`: 计算指定列的总和。
`AVG(column)`: 计算指定列的平均值。
`COUNT(column)`: 计算指定列的行数。
6. 条件函数:`CASE WHEN condition THEN result1 ELSE result2 END`: 根据条件返回不同的结果。
以上列举的函数只是Oracle SQL中的一部分常用函数,还有许多其他函数可以根据具体的需求进行选择和应用。
Oracle日期函数中常用的几大函数

Oracle日期函数:MONTHS_BETWEEN:返回两个日期之间月份的差值1.MONTHS_BETWEEN('01-EP-95','11-JAN-94')2.===>19.6774194ADD_MONTHS:在日期上加上份数.1.ADD_MONTHS('11-JAN-94',6)2.===>'11-JUL-94'NEXT_DAY:指定日期的后一天.1.NEXT_DAY('01-SEP-95','FRIDAY')2.===>'08-SEP-95'LAST_DAY:月份中最后一天.ST_DAY('01-SEP-95)2.===>'30-SEP-95'ROUND:四舍五入日期1.ROUND('25-JUL-95','MONTH') ===>01-AUG-952.ROUND('25-JUL-95','YEAR') ===>01-JAN-96TRUNC:截断日期1.TRUNC('25-JUL-95','MONTH') ===>01-JUL-952.TRUNC('25-JUL-95','YEAR') ===>01-JAN-95Oracle日期函数包括哪些:YYYY----代表完整的年份YEAR----年份MM------两位数月份MONTH---月份的完整名称DY------每星期中天的三个字符DAY-----天的完整名称1.to_char函数1.SQL> select ename,hiredate,to_char(hiredate,'YYYY-MM-DD') from scott.emp;ENAME HIREDATE TO_CHAR(HISMITH 17-12月-80 1980-12-17ALLEN 20-2月 -81 1981-02-20WARD 22-2月 -81 1981-02-222.to_date函数1.insert into scott.emp(empno,ename,hiredate)2.* values(9004,'dtConvert',to_date('1982-05-04','YYYY-MM-DD'))3.EMPNO ENAME JOB MGR HIREDATE SAL COMM4.9004 dtConvert 04-5月 -823.NVL函数:将NULL值转换成一个实际的值(date,character和number类型可以使用)eg:NVl(comm,0) 或NVL(hiredate,'01-JAN-97')或NVL(job,'No Job Yet')文章来源:网络编辑:联动北方技术论坛(如有侵权请及时联络以便删除)。
Oracle日期函数大全(各函数锦集)

Oracle日期函数大全(各函数锦集)一、常用日期数据格式1.Y或YY或YYY 年的最后一位,两位或三位SQL> Select to_char(sysdate,'Y') from dual; TO_CHAR(SYSDATE,'Y')--------------------7SQL> Select to_char(sysdate,'YY') from dual; TO_CHAR(SYSDATE,'YY')---------------------07SQL> Select to_char(sysdate,'YYY') from dual; TO_CHAR(SYSDATE,'YYY')----------------------0072.Q 季度1~3月为第一季度,2表示第二季度。
SQL> Select to_char(sysdate,'Q') from dual; TO_CHAR(SYSDATE,'Q')--------------------23.MM 月份数SQL> Select to_char(sysdate,'MM') from dual; TO_CHAR(SYSDATE,'MM')---------------------054.RM 月份的罗马表示(V在罗马数字中表示5)SQL> Select to_char(sysdate,'RM') from dual; TO_CHAR(SYSDATE,'RM')---------------------5.Month 用9个字符长度表示的月份名SQL> Select to_char(sysdate,'Month') from dual;TO_CHAR(SYSDATE,'MONTH')------------------------5月6.WW 当年第几周(2007年5月29日为2007年第22周)SQL> Select to_char(sysdate,'WW') from dual;TO_CHAR(SYSDATE,'WW')---------------------227.W 本月第几周(2007年5月29日为5月第5周)SQL> Select to_char(sysdate,'W') from dual;TO_CHAR(SYSDATE,'W')--------------------58.DDD 当年第几天(2007年5月29日为2007年第149天)SQL> Select to_char(sysdate,'DDD') from dual;TO_CHAR(SYSDATE,'DDD')----------------------1499. DD 当月第几天SQL> Select to_char(sysdate,'DD') from dual;TO_CHAR(SYSDATE,'DD')---------------------2910.D 周内第几天SQL> Select to_char(sysdate,'D') from dual;TO_CHAR(SYSDATE,'D')--------------------11.DY 中文的星期几((2007年5月29日为星期二))SQL> Select to_char(sysdate,'DY') from dual;TO_CHAR(SYSDATE,'DY')---------------------星期二12.HH或HH12 12进制小时数(16:09分为用12小时制计时为4点)SQL> Select to_char(sysdate,'HH') from dual;TO_CHAR(SYSDATE,'HH')---------------------0413.HH24 24小时制SQL> Select to_char(sysdate,'HH24') from dual;TO_CHAR(SYSDATE,'HH24')-----------------------16二、常用时间函数1.trunc(sysdate,'Q') 本季度第一天SQL> select trunc(sysdate,'Q') from dual;TRUNC(SYSDATE,'Q')------------------2007-4-12.trunc(sysdate,'D') 本周的第一天(周日)SQL> select trunc(sysdate,'D')from dual;TRUNC(SYSDATE,'D')------------------2007-5-27/doc/d112362228.html,st_day(sysdate) 本月最后一天SQL> select last_day(sysdate) from dual;LAST_DAY(SYSDATE)-----------------2007-5-31 15:20:34.add_months(sysdate,2) 日期sysdate后推2个月SQL> select add_months(sysdate,2) from dual;ADD_MONTHS(SYSDATE,2)---------------------2007-7-29 15:21:145.next_day(sysdate,2) 日期sysdate之后的第一周中,第2(指定星期的第几天)是什么日期SQL> select next_day(sysdate,2) from dual;NEXT_DAY(SYSDATE,2)-------------------2007-6-4 15:22:106.Months_between(f,s) 日期f和s间相差月数SQL> selectmonths_between(sysdate,to_date('2007-04-12','yyyy-mm-dd'))from dual; MONTHS_BETWEEN(SYSDATE,TO_DATE ------------------------------1.569099089008367.得到SYSDATE+5所在的月份SQL> SELECT to_char(SYSDATE+5,'mon','nls_date_language=american') FROM dual;TO_CHAR(SYSDATE+5,'MON','NLS_D------------------------------jun8.current_date()返回当前会话时区中的当前日期。