日期 - Access

时间:2016-06-19 02:03:05

标签: sql ms-access

我有一张表格,用于在字段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

请突出我的错误。提前致谢。我也愿意接受任何其他方式来获得今天的生日。

2 个答案:

答案 0 :(得分:2)

假设您收到日期选择器控件的日期(称之为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])

答案 1 :(得分:1)

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

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