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;