Oracle笔记
l         关于TRUNC函数
   SELECT 
   RELATED_ID ,
      DOC_ID ,
      CAT_ID ,
      CAT_CODE ,
      RELEASE_DATE ,
      RELEASE_MAN
   from TB_DOC_MODCONTENT A WHERE
   (RELEASE_DATE>=trunc(cast('2009-8-28 21:26:16' as date),'DD') AND RELEASE_DATE<trunc(cast('2009-8-28 21:26:16' as date)+1,'DD'))
关于TRUNC函数的format,自己现在有点体会,format为day时,只精确到天,而不管几年几月只要是符合的day就可以了,要想确定一年中的某月的某一天就要用trunc(date,''dd'').
 
通俗的说吧,format为年时,精确到-----年
 
为月时,精确到------年,月(不管哪年,只要是相同的月和哪天)
为日时,精确到------年,月,日(不管哪年的哪月,只关心是哪天) 
 
1.TRUNC(for dates)
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:
date 一个日期值
f ......
    
        
    
    Oracle笔记
l         关于TRUNC函数
   SELECT 
   RELATED_ID ,
      DOC_ID ,
      CAT_ID ,
      CAT_CODE ,
      RELEASE_DATE ,
      RELEASE_MAN
   from TB_DOC_MODCONTENT A WHERE
   (RELEASE_DATE>=trunc(cast('2009-8-28 21:26:16' as date),'DD') AND RELEASE_DATE<trunc(cast('2009-8-28 21:26:16' as date)+1,'DD'))
关于TRUNC函数的format,自己现在有点体会,format为day时,只精确到天,而不管几年几月只要是符合的day就可以了,要想确定一年中的某月的某一天就要用trunc(date,''dd'').
 
通俗的说吧,format为年时,精确到-----年
 
为月时,精确到------年,月(不管哪年,只要是相同的月和哪天)
为日时,精确到------年,月,日(不管哪年的哪月,只关心是哪天) 
 
1.TRUNC(for dates)
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:
date 一个日期值
f ......
    
        
    
    
数学函数
 在oracle 中distinct关键字可以显示相同记录只显示一条
  1.绝对值 
  S:select abs(-1) value 
  O:select abs(-1) value from dual 
  2.取整(大) 
  S:select ceiling(-1.001) value 
  O:select ceil(-1.001) value from dual 
  3.取整(小) 
  S:select floor(-1.001) value 
  O:select floor(-1.001) value from dual 
  4.取整(截取) 
  S:select cast(-1.002 as int) value 
  O:select trunc(-1.002) value from dual 
  5.四舍五入 
  S:select round(1.23456,4) value 1.23460 
  O:select round(1.23456,4) value from dual 1.2346 
  6.e为底的幂 
  S:select Exp(1) value 2.7182818284590451 
  O:select Exp(1) value from dual 2.71828182 
  7.取e为底的对数 
  S:select log(2.7182818284590451) value 1 
  O:select ln(2.7182818284590451) value from dual; 1 
  8.取10为底对数 
  S:select log10(10) value 1 
  O:select log(10,10) value from dual; 1 
  9.取平方 
  S:select SQUARE(4) value 16 
  O:select power(4,2) value from dual 1 ......
    
        
    
    
数学函数
 在oracle 中distinct关键字可以显示相同记录只显示一条
  1.绝对值 
  S:select abs(-1) value 
  O:select abs(-1) value from dual 
  2.取整(大) 
  S:select ceiling(-1.001) value 
  O:select ceil(-1.001) value from dual 
  3.取整(小) 
  S:select floor(-1.001) value 
  O:select floor(-1.001) value from dual 
  4.取整(截取) 
  S:select cast(-1.002 as int) value 
  O:select trunc(-1.002) value from dual 
  5.四舍五入 
  S:select round(1.23456,4) value 1.23460 
  O:select round(1.23456,4) value from dual 1.2346 
  6.e为底的幂 
  S:select Exp(1) value 2.7182818284590451 
  O:select Exp(1) value from dual 2.71828182 
  7.取e为底的对数 
  S:select log(2.7182818284590451) value 1 
  O:select ln(2.7182818284590451) value from dual; 1 
  8.取10为底对数 
  S:select log10(10) value 1 
  O:select log(10,10) value from dual; 1 
  9.取平方 
  S:select SQUARE(4) value 16 
  O:select power(4,2) value from dual 1 ......
    
        
    
    由于以前都是在sqlserver 2005处理,现在客户要求oracle数据库服务器,
最初的代码为:
allRecordSize = (Integer) rs1.getObject(1);    //Integer allRecordSize=0;
当执行的时候报:BigDecimal无法转化为Integer类型
为了兼容两者修改后的代码为:
  Object o = rs1.getObject(1);
  System.out.println(o.getClass().getName());
  if(o.getClass().getName().equalsIgnoreCase("java.math.BigDecimal") ){ 
      ballRecordSize =(java.math.BigDecimal)o;
      allRecordSize = ballRecordSize.intValue();
  }else{
   allRecordSize = (Integer)o;
  } ......
    
        
    
    由于以前都是在sqlserver 2005处理,现在客户要求oracle数据库服务器,
最初的代码为:
allRecordSize = (Integer) rs1.getObject(1);    //Integer allRecordSize=0;
当执行的时候报:BigDecimal无法转化为Integer类型
为了兼容两者修改后的代码为:
  Object o = rs1.getObject(1);
  System.out.println(o.getClass().getName());
  if(o.getClass().getName().equalsIgnoreCase("java.math.BigDecimal") ){ 
      ballRecordSize =(java.math.BigDecimal)o;
      allRecordSize = ballRecordSize.intValue();
  }else{
   allRecordSize = (Integer)o;
  } ......
    
        
    
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yf520gn/archive/2008/09/26/2982363.aspx
SELECT * from TB_MILES_CB_ORDER 
WHERE convert(varchar(100),ORDER_DATE,102)= ? 
ORDER BY ORDER_NO 
SELECT CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM 
SELECT CONVERT(varchar(100), GETDATE(), 1): 05/16/06 
SELECT CONVERT(varchar(100), GETDATE(), 2): 06.05.16 
SELECT CONVERT(varchar(100), GETDATE(), 3): 16/05/06 
SELECT CONVERT(varchar(100), GETDATE(), 4): 16.05.06 
SELECT CONVERT(varchar(100), GETDATE(), 5): 16-05-06 
SELECT CONVERT(varchar(100), GETDATE(), 6): 16 05 06 
SELECT CONVERT(varchar(100), GETDATE(), 7): 05 16, 06 
SELECT CONVERT(varchar(100), GETDATE(), 8): 10:57:46 
SELECT CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM 
SELECT CONVERT(varchar(100), GETDATE(), 10): 05-16-06 
SELECT CONVERT(varchar(100), GETDATE(), 11): 06/05/16 
SELECT CONVERT(varchar(100), GETDATE(), 12): 060516 
SELECT CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 1 ......
    
        
    
    1.选择最有效率的表名顺序(只在基于规则的优化器中有效)   
   SQLSERVER的解析器按照从右到左的顺序处理from子句中的表名,因此from子句中写在最后的表(基础表driving table)将被最先处理,在from子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表,当SQLSERVER处理多个表时,会运用排序及合并的方式连接它们,
 
   首先,扫描第一个表(from子句中最后的那个表)并对记录进行排序;然后扫描第二个表(from子句中最后第二个表);最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并
 
   例如: 表 TAB1 16,384 条记录表 TAB2 5 条记录,选择TAB2作为基础表 (最好的方法) select count(*) from tab1,tab2 执行时间0.96秒,选择TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间26.09秒;
 
如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表   
   例如:
   EMP表描述了LOCATION表和CATEGORY表的交集
   SELECT *
   from LOCATION L,
   CATEGORY C,
   EMP E
   WHERE E.EMP_NO BETWEEN 1000 AND  ......
    
        
    
    1.选择最有效率的表名顺序(只在基于规则的优化器中有效)   
   SQLSERVER的解析器按照从右到左的顺序处理from子句中的表名,因此from子句中写在最后的表(基础表driving table)将被最先处理,在from子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表,当SQLSERVER处理多个表时,会运用排序及合并的方式连接它们,
 
   首先,扫描第一个表(from子句中最后的那个表)并对记录进行排序;然后扫描第二个表(from子句中最后第二个表);最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并
 
   例如: 表 TAB1 16,384 条记录表 TAB2 5 条记录,选择TAB2作为基础表 (最好的方法) select count(*) from tab1,tab2 执行时间0.96秒,选择TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间26.09秒;
 
如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表   
   例如:
   EMP表描述了LOCATION表和CATEGORY表的交集
   SELECT *
   from LOCATION L,
   CATEGORY C,
   EMP E
   WHERE E.EMP_NO BETWEEN 1000 AND  ......
    
        
    
    由于工作需求,要对负责的产 品做点性能优化,在网上找到了相关的东西,拿 出来与大家分享:
看到很多朋友对数据库的理解、认识还是没有突破一个瓶颈,而这个瓶颈往往只是一层窗纸,越过了你将看到一个新世界。
04、05年做项目的时候,用SQL Server 2000,核心表(大部分使用频繁的关键功能每次都要用到)达到了800万数据量,很早以前查过一些相关表,有的达到了3000多万,磁盘使用的光纤盘,100G空间,每周必须备份转移数据,否则100G空间一周会满掉,这个系统几年来,目前仍然保持非常良好的性能。还听说过朋友的SQL Server 2000数据库工作在几十TB的环境下,高并发量,对这种级别的驾驭能力我还是差的很遥远。
想当年,也是一提SQL Server,就觉得它的性能没法跟Oracle相比,一提到大数据处理就想到Oracle。自己一路走来,在本地blog上记录了很多优化方面的post,对的错的都有,没有时间系列的整理出来,这篇文章将join方法的概念稍微整理在一起,给大家个参考。通过查资料了解里面提到的各种概念,在实际中不断验证总结,完全可以对数据库一步步深入理解下去的。
我只对SQL Server 2000比较了解,但这并不阻碍我在Oracle、MySql进行SQL调优、产品架构,因为在数据库理 ......