您的位置:首页 > 数据库 > Oracle

Oracle 常用函数的用法

2015-08-26 14:32 525 查看
一、对日期进行处理

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: