本帖最后由 chengyulonga 于 2012-02-29 16:51:44 编辑

解决方案 »

  1.   

    oracle时间字段是datetime,相关操作可如下:
    --oracle中时间相关的一些操作Select sysdate from dual --取当前系统时间Select to_char(sysdate , 'YYYY-MM-DD HH:MI:SS') from dual --取当前系统时间,转换为字符串
     
    Select trunc(sysdate) from dual --取当前日期
     
    Select trunc(sysdate , 'MM') from dual --取当前月的第一天
     
    Select trunc(sysdate , 'YYYY') from dual --取当年的元旦
     
    Select to_char(sysdate , 'ss') from dual --取当前时间秒部分
     
    Select to_char(sysdate , 'mi') from dual --取当前时间分钟部分
     
    Select to_char(sysdate , 'HH24') from dual  --取当前时间小时部分
     
    Select to_char(sysdate , 'DD') from dual  --取当前时间日期部分 Select to_char(sysdate , 'MM') from dual  --取当前时间月部分
     
    Select to_char(sysdate , 'YYYY') from dual  --取当前时间年部分
     
    Select to_char(sysdate , 'w') from dual  --取当前时间是一个月中的第几周(从1日开始算)
     
    Select to_char(sysdate , 'ww') from dual  --取当前时间是一年中的第几周(从1.1开始算)
     
    Select to_char(sysdate , 'iw') from dual  --取当前时间是一年中的第几周(按实际日历的)
     
    Select to_char(sysdate , 'd') from dual  --取当前时间是一周的第几天,从星期天开始,周六结束 Select to_char(sysdate , 'day') from dual --取当前日是星期几,和数据库设置的字符集有关,会输出’Tuesday’ Select to_char(sysdate , 'ddd') from dual --当前日是一年中的第几天 Select Add_months(sysdate , 12) from dual --取一年后的今天 Select sysdate - (sysdate - 100) from dual --取两个日期之间的天数 Select (sysdate - (sysdate - 100)) * 1440 from dual --取两个日期之间的分钟数
     
    Select (sysdate - (sysdate - 100)) * 1440 * 60 from dual --取两个日期之间的秒数
     
    Select months_between(sysdate,sysdate - 100) from dual --取两个日期间隔的月份Select trunc(months_between(sysdate,sysdate - 100)) from dual --取两个日期间隔的月份
     
    Select trunc(last_day(sysdate)) from dual --取当前月的最后一天
     
    Select next_day(sysdate , 1) from dual --取当前日之后第一个星期天,里面的’1’表示取星期日,如果今天正好是星期日,则会显示下一个星期日 
    1.显示当前时间select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') current_time from dual;/*
    CURRENT_TIME       
    -------------------
    2007-09-29 09:29:03
    1 row selected
    */select current_date current_time from dual;/*
    CURRENT_TIME   
    ----------------
    2007-9-29 10:34:
    1 row selected
    */2.只显示日期,不显示时间select to_char(sysdate,'yyyy-mm-dd') current_date from dual;/*
    CURRENT_DATE
    ------------
    2007-09-29  
    1 row selected
    */按时间分组求和ID      INPUT_DATE              NUM
    --      ------------------      ---
    1 2007-9-29 9:52:53 10
    2 2007-9-29 9:53:16 20
    3 2007-9-29 9:53:32 30
    4 2007-9-29 9:53:41 40
    5 2007-9-29 9:53:52 50
    6 2007-9-28 9:00:00 60
    7 2007-9-28 9:01:00 70
    8 2007-9-28 9:02:00 80
    9 2007-9-28 10:00:00 901、对上述数据按日期求和,结果如下:
    日期              NUM
    ---------- ----------
    2007-09-28        300
    2007-09-29        150
    --sql语句
    select to_char(input_date,'yyyy-mm-dd') 日期 , sum(num) num 
    from jh01 
    group by to_char(input_date,'yyyy-mm-dd')--结果
    /*
    日期              NUM
    ---------- ----------
    2007-09-28        300
    2007-09-29        150
    2 rows selected
    */2、对数据按每天每小时求和,结果如下:
    日期                 NUM
    ------------- ----------
    2007-09-28 09        210
    2007-09-28 10         90
    2007-09-29 09        150--sql语句
    select to_char(input_date,'yyyy-mm-dd hh24') 日期 , sum(num) num 
    from jh01 
    group by to_char(input_date,'yyyy-mm-dd hh24')--结果
    /*
    日期                 NUM
    ------------- ----------
    2007-09-28 09        210
    2007-09-28 10         90
    2007-09-29 09        150
    3 rows selected
    */3.按日期取num最大值的记录ID INPUT_DATE NUM
    -- ---------- ---
    9  2007-09-28 90
    5  2007-09-29 50--sql
    select a.id , to_char(a.input_date,'yyyy-mm-dd') input_date,a.num from jh01 a,
    (
      select to_char(input_date,'yyyy-mm-dd') input_date, max(num) num 
      from jh01 
      group by to_char(input_date,'yyyy-mm-dd')
    ) b
    where to_char(a.input_date,'yyyy-mm-dd') = b.input_date and a.num = b.num  /*
    ID INPUT_DATE NUM
    -- ---------- ---
    9  2007-09-28 90
    5  2007-09-29 50
    2 rows selected
    */
      

  2.   

    提示ORA-00984 错误是由于ORACLE没有SYSTIME,应该用SYSDATE。
    DATE数据类型已包含了日期和时间。
      

  3.   

    1、用sysdate 。date类型包括日期和事件,再详细的可以用timestamp
    2、别的表是否可以调用不是自己表的constraint约束? 没理解你的意思。字面上看,不能。。
    3、多少还是有差异的。比如,modify模式,不能同时修改两个列,而add constraint可以,modify不能指定表空间,add模式可以等等。
    4、索引是建立在列上,你的“适应”是个什么概念?
    5、/ 表示执行的意思
    6、没有必须。即使是单行处理,也可以弄个集合,然后用for等循环,不过,更麻烦了。
      

  4.   

    你好,感谢你的回答,关于第二点别的表是否可以调用不是自己表的constraint约束,意思就是当我用constraint命令对一个test1表建立了约束条件a1后,用已建立的a1约束是否可以对别的表test表进行同样约束呢?
    关于第四点:适用的意思就是说 建立的东西是否只能使用在建立的索引所指定的单列或者列?
    谢谢