Oracle 常用函数的用法

一、对日期进行处理


TRUNC(date, date_format)
date 需要截尾的日期。
date_format 用于指定需保留的日期格式。Num_digits 的默认值为 'dd'。


1.select trunc(sysdate) from dual  --2011-3-18  今天的日期为2011-3-18
2.select trunc(sysdate, 'mm')   from   dual  --2011-3-1    返回当月第一天.
3.select trunc(sysdate,'yy') from dual  --2011-1-1       返回当年第一天
4.select trunc(sysdate,'dd') from dual  --2011-3-18    返回当前年月日
5.select trunc(sysdate,'yyyy') from dual  --2011-1-1   返回当年第一天
6.select trunc(sysdate,'d') from dual  --2011-3-13 (星期天)返回当前星期的第一天
7.select trunc(sysdate, 'hh') from dual   --2011-3-18 14:00:00   当前时间为14:41   
8.select trunc(sysdate, 'mi') from dual  --2011-3-18 14:41:00   TRUNC()函数没有秒的精确




二、对数字进行处理


TRUNC(number, num_digits)
Number 需要截尾取整的数字。
Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
TRUNC()函数截取时不进行四舍五入


9.select trunc(123.458) from dual --123
10.select trunc(123.458,0) from dual --123
11.select trunc(123.458,1) from dual --123.4
12.select trunc(123.458,-1) from dual --120
13.select trunc(123.458,-4) from dual --0
14.select trunc(123.458,4) from dual  --123.458
15.select trunc(123) from dual  --123
16.select trunc(123,1) from dual --123

17.select trunc(123,-1) from dual --120


三、树查询

如何使用sql标准语法替换oracle专有的 connect by prior start with 语法

oracle中有专有的 connect by prior start with 语法,用于进行第归查询,产 生树形的查询结果。
该语法比较简介,在合作方大量使用。但是该语法存在一些使用限制:
1、为oracle专有,不是标准的sql语法。如果要迁移到其他数据库(比如mysql, 比如timesten),就会出现问题。
2、该语法要求进行第归的数据不能太多,否则将报错。在特定场景下,一个表数 据量的变化,引发执行计划使用的索引变化,会进一步导致原本可以执行 的一条 使用了connect by的语句报错。
3、该语法的效率非常低下。


在sql标准中,其实有替换语法,没有这些问题,也能达到一样的效果:
比如,查询id为7999的组织的所有上级组织列表:


--使用connect by prior的oracle专有语法:
select t.* from t_orgnization t where connect by prior t.parentId = t.id start with t.id = 7999;


--使用with as 的sql标准语法:
with subqry(id, name, parentId) as (
  select id, name, parentId from t_orgnization where id = 7999
  union all
  select p.id, p.name, p.parentId from t_orgnization p, subqry where p.id = subqry.parentId
  )
  select t.* from subqry, t_orgnization t
  where subqry.id = t.id; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值