SQL中的日期问题

时间:2013-12-10 19:16:55

标签: sql ms-access

我已经将日期查询归结为其基本部分,以便让我更容易理解查询。我的麻烦在于,当且仅当他们的周年纪念日等于今天或过去时,我试图触发追加事件。我的查询有效,除非我达到< = Date()的标准。这是我的SQL。

SELECT ActiveAssociates_3.UserID
  , ActiveAssociates_3.[WM DOH]
  , DateValue(DateSerial(Year(Date()),Month([WM DOH]),Day([WM DOH]))) AS Anniversary
FROM ActiveAssociates_3
GROUP BY ActiveAssociates_3.UserID
  , ActiveAssociates_3.[WM DOH]
HAVING (((DateValue(DateSerial(Year(Date())
  ,Month([WM DOH])
  ,Day([WM DOH]))))<=Date()));

WM DOH字段是ShortDate字段,Anniversary片段是租用日期和月份的DateSerial合并,具有当前系统时钟年份。周年纪念日填充正常,除非我使用&lt; = Date()标准...我只希望显示等于或等于今天之前的周年纪念日。想法...

3 个答案:

答案 0 :(得分:1)

我一直在试验DateSerialDate比较的各种变体。我可以触发“条件表达式中的数据类型不匹配”的唯一方法是在[WM DOH]中使用Null。

排除[WM DOH]包含Null的所有行。

答案 1 :(得分:0)

假设您成功执行查询。我已将cluse转换为claus ePlease @DesertSpider在SQL查询后使用的位置。

SELECT ActiveAssociates_3.UserID
  , ActiveAssociates_3.[WM DOH]
  , DateValue(DateSerial(Year(Date()),Month([WM DOH]),Day([WM DOH]))) AS Anniversary
FROM ActiveAssociates_3
WHERE (((DateValue(DateSerial(Year(Date())   ,Month([WM DOH])   ,Day([WM DOH]))))<=Date()));
ORDER BY ActiveAssociates_3.UserID   , ActiveAssociates_3.[WM DOH]

答案 2 :(得分:0)

您只是想回答:周年纪念日过去了吗?是今天的周年纪念日?,所以您可以在不了解或评估年份的情况下做到这一点。< / p>

WHERE
(
   --does the anniversary occur in a previous month?
   Month([WM DOH]) < Month(Now())
)
OR
(
   --does the anniversary occur this month, on or before today's date?
   Month([WM DOH]) = Month(Now()) 
   AND Day([WM DOH]) <= Day(Now())
)