oracle 常用知识积累 (2)

我们只可以从一个date类型中截取 year,month,day(date日期的格式为yyyy-mm-dd);  也只可以从一个 timestamp with time zone 的数据类型中截取TIMEZONE_HOUR和TIMEZONE_MINUTE;获取两个日期之间的具体时间间隔,extract函数是最好的选择。

示例:

select systimestamp s,

       extract(year from systimestamp) year,

       extract(month from systimestamp) month,

       extract(day from systimestamp) day,

       extract(minute from systimestamp) minute,

       extract(second from systimestamp) second,

       extract(timezone_hour from systimestamp) th,--时区:8

       extract(timezone_minute from systimestamp) tm,

       extract(timezone_region from systimestamp) tr,

       extract(timezone_abbr from systimestamp) ta

  from dual;

 

【注】关于TIMEZONE_HOUR、TIMEZONE_MINUTE、TIMEZONE_REGION和TIMEZONE_ABBR,用到时再研究。

 

2. 数字函数 2.1 取整函数

         ceil 向上取整,floor 向下取整:

select ceil(66.6) N1,floor(66.6) N2 from dual;--结果为67和66

2.2 取幂(power) 和 求平方根(sqrt)

select power(3,2) N1,sqrt(9) N2 from dual;

2.3 求余mod(n1,n2)

select mod(9,5) from dual;

2.4 返回固定小数位数

round(num,len)四舍五入,trunc(num,len)直接截断:

select round(66.667,2) N1,trunc(66.667,2) N2 from dual;

2.5 返回值的符号

sign(n),正数返回为1,负数为-1:

select sign(-32),sign(293) from dual;

3. 字符函数 3.1 initcap(st)

返回st将每个单词的首字母大写,所有其他字母小写

3.2 lower(st)

返回st将每个单词的字母全部小写

3.3 upper(st)

返回st将每个单词的字母全部大写

3.4 concat(st1,st2) 

返回st为st2接st1的末尾(可用操作符"||")

3.5 lpad(st1,n[,st2])

返回右对齐的st,st为在st1的左边用st2填充直至长度为n,st2的缺省为空格

3.6 rpad(st1,n[,st2])

返回左对齐的st,st为在st1的右边用st2填充直至长度为n,st2的缺省为空格

3.7 ltrim(st[,set]) 

返回st,st为从左边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格

3.8 rtrim(st[,set]) 

返回st,st为从右边删除set中字符直到第一个不是set中的字符。缺省时,指的是空格

3.9 replace(st,search_st[,replace_st])

将每次在st中出现的search_st用replace_st替换,返回一个st。缺省时,删除search_st

3.10 substr(st,m[,n])

n=返回st串的子串,从m位置开始,取n个字符长。缺省时,一直返回到st末端

3.11 length(st)

数值,返回st中的字符数

3.12 instr(st1,st2[,m[,n]]) 

数值,返回st1从第m字符开始,st2第n次出现的位置,m及n的缺省值为1

4. 转换函数 4.1 to_char(type,[fmt])

         这里type为date/timestamp/int/float/numeric等,数据类型不同,格式fmt也不同。

4.1.1 日期转字符

select  to_char(sysdate) s1,--日-月-年,格式与语言环境有关

       to_char(sysdate, 'yyyy-mm-dd') s2,

       to_char(sysdate, 'yyyy') s3,

       to_char(sysdate, 'yyyy-mm-dd hh12:mi:ss') s4,

       to_char(sysdate, 'hh24:mi:ss') s5,

       to_char(sysdate, 'DAY') s6

  from dual;

4.1.2 时间戳转字符

select  sysdate,

       systimestamp,

       to_char(systimestamp, 'yyyymmdd hh24:mi:ssxff6'),

       to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff6'),

       to_char(timestamp '2011-09-14 12:52:42.123456789', 'YYYY-MM-DD')

  from dual;

4.1.3 数字转字符

select to_char(88877) s1,

       to_char(1234567890, '099999999999999') s2,-- 000001234567890

       to_char(12345678, '999,999,999,999') s3,

       to_char(123456, '99.999') s4,--溢出,显示#####

       to_char(1234567890, '999,999,999,999.9999') s5,

       to_char(123, 'xx') s6,--十六制,7b

       to_char(4567, 'xxxx') s7,--11d7

       to_char(12345,'$99999') s8,--$12345

       to_char(12345.6,'$99,999.00') s9--$12345.60

  from dual;

【注】timestamp含义为时间戳,精确到小数秒(fractional_seconds_precision),可以是 0 to 9,缺省是6:

  select systimestamp,systimestamp(9) from dual;

4.2 to_date(c,[fmt]) 4.3 to_timestamp(c,[fmt]) 4.4 to_number(c,[fmt]) 5. 分组函数

       Oracle中的分组有两种——group by 和partition by:

group by更强调的是一个整体,就是组,只能显示一个组里满足聚合函数的一条记录; partition by 在整体后更强调个体,能显示组里所有个体的记录。

相应的分组函数也可以分为两大类:

5.1 聚合函数 5.1.1 统计方式 5.1.1.1 rollup

         按分组的第一个列进行统计和最后的小计:

select t.apply_id, t.disposal_field, count(1)

  from ebill_dump_apply_detail t

 group by rollup(t.apply_id, t.disposal_field);

 

5.1.1.2 cube

按分组的所有列的进行统计和最后的小计:

select t.apply_id, t.disposal_field, count(1)

  from ebill_dump_apply_detail t

 group by rollup(t.apply_id, t.disposal_field);

 

5.2 分析函数 5.2.1 什么是分析函数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfpyp.html