我正在帮助将经典的asp网站(前端)和ms访问数据库(后端)从Windows 2003 IIS6服务器迁移到Windows 2012 IIS 8.5服务器。我特别对这个查询有问题;
sqlquery1 = "Select RentalNum, CarID, RentalStatus, StartDate, EndDate from table where CDate(EndDate) <= CDate('"&Date()&"') order by CDate(EndDate) desc"
在现有系统上一切正常。在新系统上,返回的结果不是&lt; =“今天的日期”。结果显示了今天之前和之后的一些日期。数据库日期字段只是“文本”(我没有设置),虽然我最初的想法是将模式更改为正确的日期,但我想了解问题,特别是因为系统的许多部分使用date()和CDate使用类似的查询。 IIS服务器之间是否存在潜在的日期差异?我看过浏览器的位置,一切都很好。
任何指针?
答案 0 :(得分:1)
检查查询中使用的此表达式:
CDate('"&Date()&"')
Date()
函数将系统日期作为日期/时间值返回。但是,该表达式在Date / Time值之前和之后添加引号,将其转换为字符串值。然后CDate()
获取该字符串并再次将其转换回日期/时间值。
希望这种描述可以说服那些操作最好浪费精力。但是,如果两台服务器具有不同的日期格式设置,那么完整CDate()
表达式产生的日期可能会有所不同。
我不是肯定的,这是你问题的根源,但你可以很容易地消除这种可能性。 Access数据库引擎支持Date()
函数,因此您可以直接使用它,而无需先将其转换为字符串,然后再转换为日期/时间值。
sqlquery1 = "Select RentalNum, CarID, RentalStatus, StartDate, EndDate " & _
"from [table] where CDate(EndDate) <= Date() order by CDate(EndDate) desc"
如果该更改无法解决问题,请接下来检查这些 EndDate 文本值,并确保它们被解释为您期望的日期:
SELECT EndDate, CDate(EndDate) AS EndDate_as_date
FROM [table];
您提到“最初的想法是将架构更改为正确的日期”。我认为这是最好的方法,因为基于日期的开发日期/时间比日期作为字符串更加清晰。