简单的Oracle SQL日期语法问题

时间:2008-11-18 19:02:52

标签: sql oracle ms-access vbscript date

我正在尝试将正在运行的MS Access查询转换为在通过VB脚本(.asp)访问的Oracle数据库上运行。这是WHERE子句的最后一部分:

sql = sql & "WHERE (UAT.HB.MB_MODE = 'A' AND   UAT.HB.PRINT_DATE >= '" 
& SD & "' AND UAT.HB.PRINT_DATE <= '" & ED  &"'  )"

变量“SD”(即“开始日期”)是一个文本字符串,可以包含诸如“11/11/2008”之类的值。变量“ED”也是如此(即“结束日期”)。

但是,日期不起作用。 Oracle是否需要使用特殊方式来使用日期?

日期是否必须转换?我是否像在MS Access中一样用'#'关键字包围它们?

7 个答案:

答案 0 :(得分:17)

在Oracle中,您的日期应该写成ANSI日期文字,如下所示:

DATE '2008-11-11'

或者从这样的字符串转换为日期:

TO_DATE('11/11/2008', 'MM/DD/YYYY')

请参阅here

答案 1 :(得分:8)

不要假设默认的Oracle日期格式是任何东西。查看NLS_DATE_FORMAT或使用TO_DATE进行转换。像这样:

TO_DATE('2008-11-18 14:13:59', 'YYYY-MM-DD HH24:Mi:SS')

注意分钟的'Mi'而不是'MM'。这抓住了很多人。

答案 2 :(得分:1)

根据this,您可以使用以下内容:

to_date('19960725','YYYYMMDD')

答案 3 :(得分:0)

Oracle的默认日期格式为“dd-mon-yy”。您可以在日期字段上执行TO_CHAR功能,将其转换为您希望匹配的格式。

答案 4 :(得分:0)

以下是转换日期和日期的几个示例:

  • select to_date('2008/11/18:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam') from dual
  • select to_char(sysdate, 'mm/dd/yyyy') from dual

答案 5 :(得分:0)

默认的Oracle日期格式可以从一个数据库更改为下一个数据库。因此,如果您不知道数据库使用的日期格式,那么您应该使用带有显式日期格式字符串的TO_DATE函数。鉴于默认日期格式可能随时发生变化,使用显式日期格式字符串是最好的方法。

例如: TO_DATE('11 / 11/2008 17:30','MM / DD / YYYY HH24:MI')

答案 6 :(得分:0)

不要忘记日期包含时间(默认为00:00:00),所以
不要被这样的事情搞定:
给定三个日期start_date, print_date, end_date,全部在 相同 print_date >= start_date AND print_date <= end_date失败,因为print_date大于end_date
 start_date是2008-11-19(00:00:00)
  end_date是2008-11-19(00:00:00)
  print_date是2008-11-19( 16:00:00