You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用UNION Select查询时MS Access无法按日期范围筛选

解决Access UNION查询日期范围筛选异常问题

核心问题原因

你用Format函数把日期字段转换成了字符串类型,字符串的比较逻辑和原生日期类型完全不同。比如字符串"10/05/2023"会被当成文本排序,和"09/30/2023"比较时,"10"开头的字符串会被判定为更大,但实际日期上09/30比10/05早,这就导致范围筛选结果混乱。单个日期筛选能正常工作,是因为单个字符串匹配刚好能对应上,但范围比较就彻底失效了。

解决步骤

  1. 移除UNION查询中的Format函数
    保留日期字段的原生日期/时间类型,不要做格式转换。修改后的基础UNION查询如下:

    SELECT "Argentina" as Country, [Argentina - Immediate Refund].[Date sent], [Argentina - Immediate Refund].[Received date], [Argentina - Immediate Refund].[Released date], [Argentina - Immediate Refund].[Processed Forms] 
    FROM [Argentina - Immediate Refund]
    UNION ALL 
    SELECT "Austria" as Country, [Austria - Immediate Refund].[Date sent], [Austria - Immediate Refund].[Received date], [Austria - Immediate Refund].[Released date], [Austria - Immediate Refund].[Processed Forms] 
    FROM [Austria - Immediate Refund];
    
  2. 用Access标准语法写日期范围筛选
    Access中日期必须用#包裹,推荐用YYYY-MM-DD格式,避免因系统区域设置的日期格式差异导致识别错误。如果要筛选2023年10月1日至11月1日的记录,分两种情况:

    • 如果日期字段不带时间(仅日期):
      SELECT *
      FROM (
          -- 上面的UNION查询内容
      ) AS CombinedData
      WHERE [Date sent] BETWEEN #2023-10-01# AND #2023-11-01#;
      
    • 如果日期字段包含时间:
      直接用BETWEEN会漏掉11月1日当天非0点的记录,需明确指定时间范围:
      SELECT *
      FROM (
          -- 上面的UNION查询内容
      ) AS CombinedData
      WHERE [Date sent] >= #2023-10-01# AND [Date sent] <= #2023-11-01 23:59:59#;
      
  3. 检查子表日期字段类型
    如果子表中的Date sent等字段是文本类型而非日期/时间类型,即使去掉Format也无法正确比较。这种情况下:

    • 优先修改表结构,把字段类型改成日期/时间;
    • 若无法改表结构,在UNION查询中用CDate函数转换类型:
      SELECT "Argentina" as Country, CDate([Argentina - Immediate Refund].[Date sent]) AS [Date sent], [Argentina - Immediate Refund].[Received date], [Argentina - Immediate Refund].[Released date], [Argentina - Immediate Refund].[Processed Forms]
      FROM [Argentina - Immediate Refund]
      UNION ALL
      SELECT "Austria" as Country, CDate([Austria - Immediate Refund].[Date sent]) AS [Date sent], [Austria - Immediate Refund].[Received date], [Austria - Immediate Refund].[Released date], [Austria - Immediate Refund].[Processed Forms]
      FROM [Austria - Immediate Refund];
      

    注意:转换前提是文本字段的内容是合法的日期格式,否则会报错。

内容的提问来源于stack exchange,提问作者Marek Baranko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 08:52:56