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

时间:2008-12-09 10:18:54

标签: database ms-access vbscript ms-jet-ace

我正在使用此数据库,其中日期colomn是数值而不是Date值。

是的,我知道我可以通过鼠标点击来改变它,但是使用该数据库的所有应用程序都是由我的前任之一制作的(并且在他之后的所有人都忽略了它并构建在其上)。因此,如果我将其更改为日期很多应用程序将失败。 :(

好吧,我正在对该数据库进行概述,范围从一个特定的日期到另一个。我尝试使用下拉列表,但正如你所知,一个列表中的一千个选项非常不方便,甚至是丑陋的。

我宁愿在日 - 月 - 年有小的输入字段,但在数据库中的数字日期出现华尔兹。我不得不以某种方式计算日期回到数值......

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



我正在使用ASP(vbscript)作为应用程序,它是一个intraweb,我有一个Access数据库。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

对..所以这真的很容易。我会接受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))

输出:

  

9/12/2008,应该是39791。

     

DateToNumeric('9/12/2008')给出:39791
  CDate('39791')给出:9-12-2008

     

因为CDate('1')给出:31-12-1899

它是这样的,因为31/12/1899不是第零天,而是第一天。 :/

谢谢你们!

答案 2 :(得分:0)

访问在内部将日期存储为浮点数(自1999年12月31日以来的天数等),您是否尝试过使用CDate()将数字转换回日期?您应该能够使用BETWEEN进行查询。

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

希望这有帮助。

答案 3 :(得分:0)

可悲的是,日期存储为39791 - &gt; 9日 - 12月2008年。浮点数。

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