Oracle 系统时间 以及 取记录条数

分组,取每组最大值:select DISTINCT pk_project,VFUNDSHY from (select pk_project ,VFUNDSHY,row_number() over (partition by pk_project
 order  by Vdef5 desc) a from PDATA.T09_XT_USEFUNDS T1 WHERE DR=0) WHERE A=1

系统时间:SYSDATE
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;


ORACLE里获取一个时间的年、季、月、周、日的函数
select to_char(sysdate, 'yyyy' ) from dual; --年


select to_char(sysdate, 'MM' ) from dual; --月
select to_char(sysdate, 'dd' ) from dual; --日
select to_char(sysdate, 'Q') from dual; --季
select to_char(sysdate, 'iw') from dual; --周--按日历上的那种,每年有52或者53周




获取系统日期: SYSDATE
  格式化日期:
TO_CHAR(SYSDATE,'YY/MM/DD HH24:MI:SS)
  或 TO_DATE(SYSDATE,'YY/MM/DD HH24:MI:SS)
   select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
   select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;
   select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual
   select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh24:mi:ss') from dual
  而如果把上式写作:
   select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh:mi:ss') from dual
  则会报错,因为小时hh是12进制,14为非法输入,不能匹配。
  转换的格式:
  表示 year 的:
y 表示年的最后一位 、
  yy 表示年的最后2位 、
  yyy 表示年的最后3位 、
  yyyy 用4位数表示年
  表示month的:
mm 用2位数字表示月 、
  mon 用简写形式, 比如11月或者nov 、
  month 用全称, 比如11月或者november
  表示day的:
dd 表示当月第几天 、
  ddd 表示当年第几天 、
  dy 当周第几天,简写, 比如星期五或者fri 、
  day 当周第几天,全称, 比如星期五或者friday
  表示hour的:
hh 2位数表示小时 12进制 、
  hh24 2位数表示小时 24小时
  表示minute的:
mi 2位数表示分钟
  表示second的:
ss 2位数表示秒 60进制
  表示季度的:
q 一位数 表示季度 (1-4)
  另外还有ww 用来表示当年第几周 w用来表示当月第几周。


  当前时间减去7分钟的时间
   select sysdate,sysdate - interval '7' MINUTE from dual;
  当前时间减去7小时的时间
   select sysdate - interval '7' hour from dual;
  当前时间减去7天的时间
   select sysdate - interval '7' day from dual;
  当前时间减去7月的时间
   select sysdate,sysdate - interval '7' month from dual;
  当前时间减去7年的时间
   select sysdate,sysdate - interval '7' year from dual;
  时间间隔乘以一个数字
   select sysdate,sysdate - 8*interval '7' hour from dual;


select to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss:pm:dy') from dual; 年月 日 24制小时 分 秒 上/下午 星期中文;
--获取11月天数--select to_char(last_day(to_date('2010-11-1','YYYY-MM-DD')),'DD') from dual;
--获取12月天数--select to_char(last_day(to_date('2010-12-1','YYYY-MM-DD')),'DD') from dual;
显示上个礼拜一到礼拜日 SELECT to_char(SYSDATE,'yyyymmdd')-to_number(to_char(SYSDATE,'d')-1) - 6, to_char(SYSDATE,'yyyymmdd')-to_number(to_char(SYSDATE,'d')-1) from dual




取查询结果的第n条数据:直接使用  rownum
select   *   from   table   where   rownum<20     
  minus     
  select   *   from   table   where   rownum<10     
  
//但这种查询的效率更高于前者 (556436条数据,测试结果)  
select * from (select rownum r,a.* from blog a where rownum<=20) where r>=10;  
  
  
  
mysql> SELECT * FROM table LIMIT 5,10;  // 检索记录行 6-15  
  
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:   
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.  
  
//如果只给定一个参数,它表示返回最大的记录行数目:   
mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行  
  
//换句话说,LIMIT n 等价于 LIMIT 0,n  
  
  
  
mysql limit查询优化[转载],由于limit经常用到,却没有注意,因为平时做的项目都比较小,所以也没有考虑去怎么优化,今天看了一篇关于mysql limit优化的文章,感觉很好 于是转载过来  
  
原文地址在这里  
http://www.phpobject.net/blog/read.php?119  
  
MYSQL的优化是非常重要的。其他最常用也最需要优化的就是limit。mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降。  
       同样是取10条数据  
  
select * from yanxue8_visit limit 10000,10        和  
  
   
  
select * from yanxue8_visit limit 0,10   
  
  
就不是一个数量级别的。  
  
    网上也很多关于limit的五条优化准则,都是翻译自mysql手册,虽然正确但不实用。今天发现一篇文章写了些关于limit优化的,很不错。原文地址:http://www.zhenhua.org/article.asp?id=200  
  
    文中不是直接使用limit,而是首先获取到offset的id然后直接使用limit size来获取数据。根据他的数据,明显要好于直接使用limit。这里我具体使用数据分两种情况进行测试。(测试环境win2033+p4双核 (3GHZ) +4G内存 mysql 5.0.19)  
  
1、offset比较小的时候。  
  
select * from yanxue8_visit limit 10,10   
  
  
   多次运行,时间保持在0.0004-0.0005之间  
  
Select * From yanxue8_visit Where vid >=(  
  
Select vid From yanxue8_visit Order By vid limit 10,1  
  
) limit 10   
  
  
  多次运行,时间保持在0.0005-0.0006之间,主要是0.0006  
 结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。  
  
  
2、offset大的时候。  
  
select * from yanxue8_visit limit 10000,10   
  
  
   多次运行,时间保持在0.0187左右  
  
Select * From yanxue8_visit Where vid >=(  
  
Select vid From yanxue8_visit Order By vid limit 10000,1  
  
) limit 10   
  
  
多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值