我正在尝试将正在运行的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中一样用'#'关键字包围它们?
答案 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 )