`
chenhongwei0924
  • 浏览: 42572 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

sql2

阅读更多
Q]怎么获得今天是星期几,还关于其它日期函数用法 
[A]可以用to_char来解决,如  
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;  
在获取之前可以设置日期语言,如 
   ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; 
还可以在函数中指定 
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;  
其它更多用法,可以参考to_char与to_date函数 
如获得完整的时间格式 
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from  dual; 
随便介绍几个其它函数的用法: 
本月的天数 
SELECT to_char(last_day(SYSDATE),'dd') days FROM dual 
今年的天数  
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual 
下个星期一的日期 
SELECT Next_day(SYSDATE,'monday') FROM dual 
  
[Q]随机抽取前N条记录的问题 
[A]
 select * from (select a.* ,rownum t from tablename a order by sys_guid()) where t<N 

[Q] 如何产生随机数
[A]
dbms_random包需要手工安装,位于$ORACLE_HOME/rdbms/admin/dbmsrand.sql 
dbms_random.value(100,200)可以产生100到200范围的随机数 
  
[Q]抽取从N行到M行的记录,如从20行到30行的记录 
[A]select * from (select rownum id,t.* from table t where ……  
and rownum <30) where id > 20; 
  
[Q]怎么样抽取重复记录 
[A]select * from table t1 where where t1.rowed != 
(select max(rowed) from table t2  
where t1.id=t2.id and t1.name=t2.name) 
或者 
select count(*), t.col_a,t.col_b from table t 
   group by col_a,col_b 
having count(*)>1 
如果想删除重复记录,可以把第一个语句的select替换为delete 
  
[Q]怎么样设置自治事务 
[A]8i以上版本,不影响主事务 
pragma autonomous_transaction; 
…… 
commit|rollback; 
   
[Q]怎么样在过程中暂停指定时间 
[A]DBMS_LOCK包的sleep过程 
如:dbms_lock.sleep(5);表示暂停5秒。 
  
[Q]怎么样快速计算事务的时间与日志量 
[A]可以采用类似如下的脚本 
DECLARE  
   start_time NUMBER; 
   end_time NUMBER; 
   start_redo_size NUMBER; 
   end_redo_size NUMBER; 
BEGIN 
   start_time := dbms_utility.get_time; 
   SELECT VALUE INTO start_redo_size FROM v$mystat m,v$statname s  
              WHERE m.STATISTIC#=s.STATISTIC# 
                 AND s.NAME='redo size'; 
   --transaction start 
   INSERT INTO t1  
      SELECT * FROM All_Objects;    
   --other dml statement 
   COMMIT; 
   end_time := dbms_utility.get_time; 
   SELECT VALUE INTO end_redo_size FROM v$mystat m,v$statname s  
              WHERE m.STATISTIC#=s.STATISTIC# 
                 AND s.NAME='redo size'; 
   dbms_output.put_line('Escape Time:'||to_char(end_time-start_time)||' centiseconds'); 
   dbms_output.put_line('Redo Size:'||to_char(end_redo_size-start_redo_size)||' bytes'); 
END; 
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics