【问题标题】:Date - Data type mismatch in criteria expression in Access日期 - Access 中的条件表达式中的数据类型不匹配
【发布时间】:2016-06-20 14:58:25
【问题描述】:

我有一个表格,在字段DateValueOf 中存储生日。我正在创建一个查询,用户可以输入任何日期,查询将返回当天生日的客户。

为此,我正在尝试将DateValueOf 中的所有年份转换为当前年份。

eg > #13-10-1996# to #13-10-2016#
eg > #13-10-2001# to #13-10-2016#

然后我会要求用户从日期选择器中选择日期并运行以下查询。

SELECT CustomerID 
WHERE FormatDateTime(DateValue(DateSerial(Year(Date()),Month([DateValueOf]),Day([DateValueOf]))),2) >= #13-10-2016#

但是这个 SQL 语句会产生错误data type mismatch in criteria expression

请指出我的错误。提前致谢。我也愿意通过任何其他方式知道今天是谁的生日。

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    假设您从日期选择器控件(称为:myDatePicker)接收日期,则由函数 Date() 返回的今天日期不相关。
    除非你想要年龄,否则Year() 也不相关。

    SELECT CustomerID 
    FROM MyTableName
    WHERE Month(myDatePicker) = Month([DateValueOf]) AND Day([DateValueOf]) = Day([myDatePicker])
    

    如果你想要客户在这个生日的年龄,你可以将计算添加到 SELECT 子句中:

    SELECT CustomerID, Year(myDatePicker) - Year(DateValueOf) As CustomerAge 
    FROM MyTableName
    WHERE Month(myDatePicker) = Month([DateValueOf]) AND Day([DateValueOf]) Day([myDatePicker])
    

    【讨论】:

    • 不错的建议。我已经在我的项目中实施了您的解决方案。谢谢
    【解决方案2】:

    不用担心格式化日期,只需使用日期比较即可:

    SELECT CustomerID 
    WHERE DateSerial(Year(Date()),Month([DateValueOf]),Day([DateValueOf]))
       >= #13-10-2016#
    

    【讨论】:

    • 我尝试了您的建议,但仍然出现错误。经过大量的研究和反复试验,我知道我得到了Data type mismatch in criteria expression,因为在某些情况下DateValueOf 字段是空的。我该如何管理?
    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多