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

Posted

技术标签:

【中文标题】数据库中的数字“日期” - 如何使用“正常”日期与之交互?【英文标题】:Numeric "date" in database - How to interact with that using "normal" dates? 【发布时间】:2008-12-09 10:18:53 【问题描述】:

我正在使用这个数据库,其中日期列是数值而不是日期值。

是的,我知道我可以通过单击鼠标来更改它,但是使用该数据库的所有应用程序都是由我的一位前任创建的(他之后的每个人都忽略了它并继续构建)。因此,如果我将其更改为 Date 很多应用程序将失败。 :(

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

我宁愿为日-月-年提供小的输入字段,但数据库中的数字日期会出现华尔兹舞曲。我将不得不以某种方式将日期计算回数值......

必须有一个简单的解决方案。对吧? 我正在为应用程序使用 ASP(vbscript),它用于内部网络,并且我有一个 Access 数据库。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

好吧..所以这真的很容易。我会接受 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('9/12/2008') 给出:39791 CDate('39791') 给出:9-12-2008

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

它使 1899 年 12 月 31 日不是第 0 天,而是第 1 天。 :/

谢谢大家!

【讨论】:

【参考方案3】:

Access 在内部将日期存储为浮点数(自 31.12.1899 或其他日期以来的天数),您是否尝试过使用 CDate() 将数字转换回日期?你应该可以使用 BETWEEN 进行查询。

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

希望这会有所帮助。

【讨论】:

【参考方案4】:

遗憾的是,日期存储为 39791 -> 9-dec-2008。浮点数。

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

【讨论】:

对我来说这看起来像是“自 31.12.1899 以来的天数”。按照 Simon 的建议尝试 CDate。 是的,CDate 可以将数字转换为日期。 :) 但我在将日期转换为数字时遇到问题......

以上是关于数据库中的数字“日期” - 如何使用“正常”日期与之交互?的主要内容,如果未能解决你的问题,请参考以下文章

如何以 dd/mm/yyyy hh:mm 格式从 CSV 导入日期到 R 中的通用数字字符串

如何在chartjs数据集中为Object []使用x值中的日期,我收到一个错误:'TS2322:类型'字符串'不可分配给类型'数字'。

在VB.NET中如何将日期类型转化为String型?

excel如何将数字日期变成斜杠日期

gson转换日期会失真吗

excel纯数字日期自动如何变成斜杠格式