Ms access 我的Access查询返回日期格式相反的错误结果

Ms access 我的Access查询返回日期格式相反的错误结果,ms-access,vbscript,asp-classic,Ms Access,Vbscript,Asp Classic,我有一个在本地托管的经典ASP编写的应用程序。 此应用程序正在使用Microsoft Access数据库。 我的问题在于此请求,我需要当天的所有数据: `SELECT * FROM TABLE WHERE Date= #01/03/2020#` 我得到的结果如下: do while not rs.EOF 回复。填写(“&rs(“日期”)) 下一个 环 我现在只提取日期,它应该与请求中的日期相同。 然而,我的结果是2020年1月3日,2020年1月3日 我有一个设置输出格式的函数: 函数显

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

`SELECT * FROM TABLE WHERE Date= #01/03/2020#`  
我得到的结果如下:

do while not rs.EOF
回复。填写(“&rs(“日期”))
下一个
环
我现在只提取日期,它应该与请求中的日期相同。
然而,我的结果是2020年1月3日,2020年1月3日

我有一个设置输出格式的函数:

函数显示日期(dateToClean)
dateToShow=Right(“0”和Day(dateToClean),2)_
&“/”和右键(“0”和月(dateToClean),2)_
&“/”&年(日期清洁)
'如果日期长度太小,则为空(0/0/0)
如果(len(dateToShow)<10),则
displayDate=“”
其他的
displayDate=dateToShow
如果结束
端函数
由于此文档,我尝试更改数据库中的日期格式:

但这并没有解决我的问题。
希望我能理解

为了安全起见,请使用ISO序列。三月一日:

SELECT * FROM TABLE WHERE [Date] = #2020/03/01#
准备好后,格式化输出:

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

如果该格式不符合您的目的,则说明您的方法不安全。使用Lankymart在其评论中链接到的方法。

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

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

因此,要拉动,您需要:

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

对于以上两种情况,我们讨论的是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格式

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


因此,尝试使用+操作任何日期值作为实际日期类型,并且仅在输出时格式化,对于任何数据查询提取,您必须为USA或ISO格式化。

首先,日期是保留字,不应使用保留字作为任何名称。如果您这样做了,那么在查询中使用[]进行定界:
[Date]
。看看这篇文章是否有帮助这不是原始名称,我为这篇文章按“日期”更改了它。@Lankymart,谢谢,但没有。我确实有一种格式问题,但代码中的一切都很好。我宁愿认为问题在我的数据库中,但我找不到它。对不起,所需的格式是dd-mm-yyyy。这是在我的代码和数据库中设置的格式。我想得到第一个三月的所有数据,但是第三个一月就回来了。我确实有一个格式化输出的函数,但即使使用它,它也不会改变任何内容。
format()
命令在VBScript中不可用,您可能会想到
FormatDateTime()
,但这是非常有限的。详细说明如何在经典ASP/VBScript中设置日期格式。我在帖子中添加了设置输出格式的函数。您感到困惑。存储的日期值不带格式。格式仅用于显示或构建字符串表达式以在SQL中连接。请看编辑后的答案。@Gustav不,我明白了。我正在提取日期对象的日期、月份和年份,以生成一个字符串,用于SQL请求或打印它。这就是我函数的目的,将日期转换为字符串。感谢您在这方面的帮助:)
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) & "#"