我ORACLE中的字段名称是:PADDATE,类型是DATE,我发一个字段的例子:
“2008-5-5 15:13:37” ,数据就是这个形式,我要想查时间段内的数据怎么写SQL,
我用 select * from xxx c where c.paddate between '2008-4-5 15:13:37' and '2009-5-5 15:13:37' 类似于这样的语句在PL/SQL 中提示 “文字与格式字符串不匹配”,应该如何写?

解决方案 »

  1.   

    二、 对日期的操作
    在SQL Server 里的日期数据,我们经常可以用 字段<=’2008-5-20’这样的表达式,但在oracle却不可以,因为数据类型不一样 字段是date型,’2008-5-20’是字符型,需要用to_char 或者to_number转换成相同的类型才能进行比较。
    刚开始这让我觉得不习惯,觉得不好,不过时间长了,觉得也有不少便利之处,尤其是配合trunc啊,to_char之类的,下面简单写一下常用的一些对日期的操作
         SELECT SYSDATE  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 last_day(sysdate) from dual 取当前月的最后天
    Select next_day(sysdate,’1’) from dual 取当前日之后第一个星期天,里面的’1’表示取星期日,如果今天正好是星期日,则会显示下一个星期日
      

  2.   

    那是因为你的字段是char型的,不是DATE的
      

  3.   

    正确的
    select * 
           from xxx c 
           where c.paddate between to_date('2008-4-5 15:13:37','yyyy-mm-dd hh24:mi:ss')
                 and to_date('2009-5-5 15:13:37','yyyy-mm-dd hh24:mi:ss') 
      

  4.   

     select * from xxx c where to_char(c.paddate,'yyyy-mm-dd hh24:mi:ss') between '2008-4-5 15:13:37' and '2009-5-515:13:37'
     
      

  5.   

    同意hebo2005的
    jin_ok 的也可行,可是效率比较低
      

  6.   

    select * from 表名 c where to_char(c.paddate,'yyyy/mm/dd hh24:mi:ss')>'"+starTime+"' and to_char(c.paddate,'yyyy/mm/dd hh24:mi:ss')<'"+endTime+"'";
      

  7.   


    select * from 表名 c where to_char(c.paddate,'yyyy/mm/dd hh24:mi:ss')>'"+starTime+"' and to_char(c.paddate,'yyyy/mm/dd hh24:mi:ss') <'"+endTime+"'
      

  8.   

     alter session set nls_date_format = 'yyyy-mm-dd';  <1> sysdate 系统时间
            select sysdate from dual;
            select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;
            select to_char(sysdate,'DDD') from dual   
          select to_char(sysdate,'D') from dual
          select to_char(sysdate,'DAY') from dual      select to_char(sysdate,'yyyy-mm-dd') from dual;  select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh24:mi:ss') from dual;
     
     select '''' from dual;select to_char(sysdate,'SSSSS') from dual;
      --从今天零点以后的秒数   <2> ADD_MONTHS 添加月份 得到一个新的日期
            select add_months(sysdate,1) from dual;       select add_months(sysdate,-1) from dual;        select trunc(sysdate)-to_date('20050101','yyyymmdd') from dual;
           select add_months(sysdate,12) from dual;
               一年以后的今天
    select add_months(sysdate,-12) from dual;
               一年以前的今天     trunc(sysdate) 截取年月日
     
     select sysdate+2 from dual;
            数字代表的是天数     两个日期之间的差值代表天数    <3> last_day  某月的最后一天
           select last_day(sysdate) from dual; 
           
           select add_months(last_day(sysdate)+3,-1) from dual;
                本月第3天的日期
      <4>  months_between 两个日期之间的月数
             select months_between(sysdate,'2005-02-01') from dual;
                     方向 sysdate - '2005-02-01'
          select months_between('2005-02-01',sysdate) from dual;
         
     转换函数
       to_char   把日期或数字类型变为字符串
           select to_char(sysdate,'hh24:mi:ss') from dual;
           select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;       select sal,to_char(sal,'L9,999') from emp;
                 L本地货币
      to_number   把字符串变成数字
          select to_number('19990801') from dual; 
      
      to_date     把字符串变成日期
          select to_date('19800101','yyyymmdd') from dual;      select to_char(to_date('19800101','yyyymmdd'),
            'yyyy"年"mm"月"dd"日"') from dual;