输入为变量的日期n MS Access在SQL查询中给出了不可预测的结果

本文探讨了MS Access数据库在处理英国日期格式(DD/MM/YYYY)时可能产生的问题,尤其是在SQL查询中。介绍了如何使用VBA函数DateforSQL转换日期格式,确保SQL查询始终接收美国标准的MM/DD/YYYY格式日期。

本文是由于我在Access数据库中遇到的问题而导致的。

SQL假定日期采用美国格式:MM / DD / YYYY。 假设将日期输入到MS Access表单中,然后在基础SQL查询中使用该日期。 如果日期为英国格式DD / MM / YYYY,则可能会出现不可预测的结果,因为Access试图将日期解释为美国格式。 如果得出有效日期,则该过程将更改日期。 如果原始日期不能解释为美国格式的有效日期,则保留原始日期。

一个例子将说明。

在Access表单中名为test_date的控件中输入日期。 输入的日期是2010年3月6日,对应于英国格式的06/03/2010。

假设日期包含在某些基础VBA中的SQL语句中,例如

"SELECT [field_1] FROM tbl_Events WHERE [date_Event]<#" & test_date & "#;"

实际执行的SQL语句是

"SELECT [field_1] FROM tbl_Events WHERE [date_Event]<#03/06/2010#;"

这不是必需的结果。

另一方面,如果日期为2010年3月31日,则SELECT语句将正确地为

"SELECT [field_1] FROM tbl_Events WHERE [date_Event]<#31/03/2010#;"

因为将31/03/2010解释为美国格式不会产生有效日期-因此该日期保持不变。

以下子例程确保日期始终以预期的美国格式显示给SQL查询。


    Public Function DateforSQL(thisDate As Date) As String
'
    'This function returns a string representing the date thisDate (in UK dd/mm/yyyy format)
    ' converted to US format - mm/dd/yyyy. It is necessary because MS Access (or its underlying
    ' JET engine?), assumes that dates are in US format 
    Dim dayStr As Integer, monthStr As Integer, yearStr As Integer 
    dayStr = Day(thisDate)
    ' This function returns the day of the month as an integer 
    monthStr = Month(thisDate)
    ' This function returns the month, as an integer 
    yearStr = Year(thisDate)
    ' This function returns the year, as an integer 
    DateforSQL = monthStr & "/" & dayStr & "/" & yearStr 
    Exit Function
    End Function 
DateforSQL是一个String变量,因此可在VBA SQL语句中使用,例如: "SELECT [field_1] FROM tbl_Events WHERE [date_Event]<#'" & DateforSQL(test_date) & "'#;"

From: https://bytes.com/topic/visual-basic/insights/902657-dates-entered-variables-n-ms-access-give-unpredictable-results-sql-queries

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值