VB编程环境+Oracle数据库
时间字段名称:DT
时间存储格式示例:"10-十二月-2008 02:45:00 AM"
目的:利用VB时间变量作为条件查询,初始变量格式如T"2008-12-17 13:14:00"或"2008-12-17 01:14:00 PM”
注意:Oralce字段格式或系统时间格式均不能修改,以下几种测试结果仅供参考(F_YH为自定义函数,功能为添加字符串两边的单引号,TIME为时间变量)
测试用SQL语句1:
"SELECT * FROM T Where DT < To_Date( " & f_YH(Format(TIME, "dd-mm-yyyy hh:MM:ss AM/PM")) & ",'DD-MM-YYYY HH12:Mi:SS PM ')"
现象:“Ora01855:要求AM/A.M或PM/P.M测试用SQL语句2:
"SELECT * FROM T Where DT < To_Date( " & f_YH(Format(TIME, "dd-mm-yyyy hh:MM:ss AM/PM")) & ",'DD-MM-YYYY HH12:Mi:SS ')"
现象:“Ora01830:日期格式图片在转换整个输入字符串之前结束测试用SQL语句3:
"SELECT * FROM T Where DT < To_Date( " & f_YH(Format(TIME, "dd-mm-yyyy hh:MM:ss")) & ",'DD-MM-YYYY HH12:Mi:SS ')"
现象:上午正常,下午会出现“Ora01849:小时值必须介于1-12之间。测试用SQL语句4:
"SELECT * FROM T Where  To_Date(DT,'DD-MM-YYYY HH24:Mi:SS ')< To_Date( " & f_YH(Format(TIME, "dd-mm-yyyy hh:MM:ss ")) & ",'DD-MM-YYYY HH24:Mi:SS ')"
现象:“Ora01849:(全)年度值必须介于-4713和+9999之间,皆不为0能将数据记录按时间过滤后给分结帖。

解决方案 »

  1.   

    想要什么结果啊阿。直接用sql语句不可以吗。
      

  2.   

    select to_date('21/01/2002 17:02:23'   ,'dd/mm/yyyy hh24:mi:ss')from dual
    只要保证输入的字符串格式和formatstring的格式一样就行了。
      

  3.   

    select * from tb to_char(时间字段,'YYYY-MM-DD') = '2008-12-16'select * from tb to_char(时间字段,'YYYY-MM-DD HH') = '2008-12-16 12'select * from tb to_char(时间字段,'YYYY-MM-DD HH:MM') = '2008-12-16 12:20'select * from tb to_char(时间字段,'YYYY-MM-DD HH:MM:ss') = '2008-12-16 12:20:25'
      

  4.   

    能帮助我在VB里实现查询就可以,大概就是类似"select * From T Where (DT〉Time1) and (DT <Time2)“ ,
    我写出来的SQL语句运行时总会出错,能提示我解决掉也可以。
      

  5.   

    select *
      From T
     Where dt between to_date('2008-6-1 12:00:00', 'yyyy-mm-dd hh24:mi:ss') and
           to_date('2008-12-5 12:00:00', 'yyyy-mm-dd hh24:mi:ss');
    直接用sql语句
      

  6.   

    >>现象:“Ora01855:要求AM/A.M或PM/P.Mselect to_date('2008-12-17 01:14:00 下午','yyyy-mm-dd hh:mi:ss am')from dual
      

  7.   

    OK。谢谢各位的帮忙,结贴了。
    是我看到数据库里的时间格式显示"10-十二月-2008 02:45:00 AM",以为不能直接和to_date('2008-6-1 12:00:00', 'yyyy-mm-dd hh24:mi:ss')的格式比较,所以走了弯路。
    试了5楼的回复,可以了。
    另外3楼的提醒我可以尝试走另一个方向,用To_char而不是to_Date,稍后我试试看,不管怎么说也是个不错的思路。
      

  8.   

    因为日期格式具有不确定性,在sql查询的条件当中最好不要做类型转换。标准的做法是用日期类型的参数来查询。
      

  9.   

    去结帖了,刚看到新的回复,即使To_char能用也尽量不用,是这个意思吧?谢谢,我会注意。