我有一张表有个字段名称是starttime 类型是DATE ,其中有一行的值是"11:00:00",我想把这一列选出来,语句如下:
select * from routebanci where starttime='11:00:00' and routename='***',可是总是说:ORA-01843: not a valid month,网上看了也改动了一下参数 NLS_DATE_LANGUAGE=AMERICAN 和 NLS_DATE_FORMAT=YYYY-MM-DD,可是还是不行
请教一下什么原因,我这里没有年月日的,只要一个时间就可以了,表原来是SQL建立的,是导过来的,不知道有什么好的解决办法

解决方案 »

  1.   

    ...starttime你不是说了是date类型吗
    '11:00:00'是字符串,当然不匹配了
    select * from routebanci where to_char(starttime,'hh24:mi:ss')='11:00:00' and routename='***'
    试试
      

  2.   

    select * from routebanci where substr(to_char(starttime,'yyyy-mm-dd hh24:mi:ss'),11,8) = '11:00:00'
      

  3.   

    --给你示例子:
    select to_char(sysdate,'hh24:mi:ss') from dual;
      

  4.   

    哦,这样的话可以了,谢谢.
    能不能转化后面的,前面试了TO_DATE()好像不行,不知道应该怎么写,这样查询范围的话方便一点,这里应该可以使用between语句的吧,没有用过QRACLE 呵呵 
      

  5.   

    可以啊,但是这样的话就要匹配到年月日,因为date格式包含了年月日时分秒
    当没对年月日赋值时,年月日会被默认为当年本月的第一天
    所以只将时间转换为日期格式,恐怕很难查到你想要的数据
    看看select to_date('110000','hh24miss') from dual
      

  6.   


    select * from routebanci where to_char(starttime,'hh24:mi:ss')='11:00:00' and routename='***'oracle时间是比较严格的,to_char可以转换成字符串,to_date是可将字串转换成时间
      

  7.   

    哦 谢谢wildwave,那么这里面就不能存只有时分秒的时间吗,我发现从SQL转过来的都有1899-12-30,好像去不掉,能去掉吗?
      

  8.   

    --存分秒时间段:select to_char(表的字段,'mi:ss') from table1;--TEST select to_char(sysdate,'mi:ss') from dual;--RESULT:
    33:28
      

  9.   

    不能去掉,如果能去掉就不是date了
    如果只有时间部分有用,查询的时候进行下例如to_char处理,像1楼写的那样