我的 Access 查询 returns 日期格式颠倒的错误结果

My Access query returns bad results with reversed date format

我有一个用经典语言编写的应用程序 ASP 在本地托管。
此应用程序正在使用 Microsoft Access 数据库。
我的问题是这个请求,我想要当天的所有数据:

`SELECT * FROM TABLE WHERE Date= #01/03/2020#`  

我得到这样的结果:

do while not rs.EOF 
   response.write(" " & rs("Date"))
   rs.movenext
loop

我现在只提取日期,它应该与请求中的日期相同。
但是我的结果是 03/01/2020, 03/01/2020.

我有格式化输出的功能:

function displayDate(dateToClean)
    dateToShow = Right("0" & Day(dateToClean), 2) _
        & "/" & Right("0" & Month(dateToClean), 2) _
        & "/" & Year(dateToClean)
    'If the date length is too small, it's null (0/0/0)
    if (len(dateToShow) < 10) then
        displayDate = ""
    else
        displayDate = dateToShow
    end if
end function

由于这个文档,我尝试更改数据库中的日期格式:
https://support.office.com/en-us/article/format-a-date-and-time-field-47fbbdc1-52fa-416a-b8d5-ba24d881b698
但它并没有解决我的问题。 希望我是可以理解的。

为安全起见,请使用 ISO 序列。 3 月 1 日:

SELECT * FROM TABLE WHERE [Date] = #2020/03/01#

准备就绪后,格式化您的输出:

response.write(" " & FormatDateTime(rs("Date"), 2))

如果该格式不符合您的目的,则您的方法不安全。使用 his/her 评论中 Lankymart 链接的方法。

请记住,内部日期格式是一个内部数字。您可以根据需要格式化输出(就像您的函数一样)。但是,当您进行查询时,您必须遵循 ISO 格式,或 mm/dd/yyyy(美国格式)。无论您的区域设置如何,此要求都不会更改,并且您无法更改此 ISO/USA 查询格式要求(提取数据)。

因此 query/pull 的数据 - 日期格式必须是 ISO 或 USA (mm/dd/yyyy)。一旦你提取了这些数据,你就可以使用你的函数来显示你想要的日期。

因此,要拉动,您需要:

SELECT * FROM tblInvoices where InvoiceDate = #01/03/2020#

SELECT * FROM tblInvoices WHERE InvoiceDate = #2020-01-03#

对于以上两个,我们谈论的是 2020 年 1 月 1 日

dim dtInvoiceDate as date

dtInvoice = #01/03/2020#    - MUST use USA format.

dim strSQL as string

strSQL = "SELECT * from tblInvoice WHERE InvoiceDate = " & "#" & Month(dtInvoice) & "/" & _
    Day(dtInvoice) & "/" & Year(dtInvoice) & "#"

因此,请记住,任何查询拉取都与格式无关,甚至与您的计算机区域设置无关。您不能为此更改数据库引擎设置 - 它始终是美国格式或 ISO 格式。

拉取数据后,或使用响应。写入,然后这样的字符串输出将显示在您的计算机区域设置中。如前所述,如果您想强制使用一种格式而不考虑您的计算机设置,那么您拥有的方便的花花公子功能是一个相当不错的方法。请记住,您的功能仅用于显示。对于拉取数据,您不能使用该格式。

因此,请尝试使用 + 将任何日期值作为实际日期类型进行操作,并且仅在输出时进行格式化,并且对于任何查询拉取的数据,您都必须针对美国或 ISO 进行格式化。