数据库中的数字“日期” - 如何与使用“正常”日期的交互?

问题描述:

我在使用此数据库日期colomn是数值而不是日期值。数据库中的数字“日期” - 如何与使用“正常”日期的交互?

是的,我知道我可以通过鼠标点击来改变它,但是使用该数据库的所有应用程序都是由我的一位前任创建的(后面的每个人都忽略了它并构建了它)。因此,如果我将它更改为日期,则应用程序将失败。 :(

那么,我对这个数据库做了一个概述,从一个特定日期到另一个日期。我尝试使用一个下拉列表,但正如你所看到的,一个列表中的一千个选项是非常不方便的,甚至是丑陋的。

我宁愿有一天小inputfields - 月 - 年,但也有来自于数据库中的数字日期华尔兹,我将不得不计算日期回莫名其妙的数值...

必须有这是一个简单的解决方案。对吗?



我使用ASP(vbscript)for t他的应用程序,它是一个intraweb,我有一个Access数据库。

如前所述,访问将转换为您的号码,日期存储为数字。

Dim rs As DAO.Recordset 

Set rs = CurrentDb.OpenRecordset("TestTable") 
rs.AddNew 
rs!NumberDate = Now() 'Value stored, eg, 39791.4749074074 ' 
rs.Update 

rs.MoveLast 

'To show that it converts back to the correct date/time ' 
Debug.Print Format(rs!NumberDate, "dd/mm/yyyy hh:nn:ss") 

重新编辑点评:这是一个小的测试,显示日期返回:

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

strFile = "C:\Docs\LTD.mdb" 

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & strFile & ";" & _ 
     "Persist Security Info=False" 

strSQL = "SELECT NumberDate FROM TestTable WHERE NumberDate= #2008/12/7#" 

rs.Open strSQL, cn, 3, 3 
rs.MoveLast 

MsgBox rs.RecordCount 

访问存储日期在内部作为一个浮点数(从31年1月31日以来的天数或某事),您是否尝试使用CDate()将数字转换回日期?那么你应该可以使用BETWEEN进行查询。

另一种可能性是日期数字存储但未转换(即31121899),在这种情况下,您应该能够使用Format()或Day()或Month()或Year( )。

希望这会有所帮助。

不幸的是,日期存储为39791 - > 2008年12月9日。浮点数。

我有一个JavaScript函数(也由相同的前任)编写的日期转换为可读格式。这是相反的方式,回到那个让我感到困惑的数字值。

+0

这看起来像“自31.12.18.99以来的天数”给我。尝试西蒙建议的CDate。 – JeeBee 2008-12-09 11:25:03

+0

是的,CDate可以将数字转换为日期。 :) 但我有问题将日期转换为数字... – Kablam 2008-12-09 11:51:50

的权利..所以这是真正的轻松。我会接受Remou的答案,WHERE NumberDate =#2008/12/7#会诀窍。

但是,把一个接近此事的,这里的解决方案,以我自己的小提琴演奏与功能:

Function DateToNumeric(dayDate) 
    DateToNumeric=DateDiff("d","31/12/1899",dayDate) +1 //yup 
End Function 

    response.Write("9/12/2008, should be 39791.<br /><br />") 
    response.write("DateToNumeric('9/12/2008') gives: " &DateToNumeric("9/12/2008")& "<br />") 
    response.write("CDate('39791') gives: " &CDate(39791)&"<br /><br />") 
    response.write("BECAUSE CDate('1') gives: " &CDate(1)) 

输出:

2008年9月12日,应该是39791。

DateToNumeric( '2008年9月12日')给出:39791
CDATE( '39791')给出:2008年9月12日

BECAUSE CDATE( '1')给出:31-12-1899

这是为了使得31/12/1899不是零日,而是第一天。 :/

谢谢你们!