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

Excel ODBC查询中如何将时间戳与当前日期进行比较?

解决Excel ODBC查询中当前日期比较的问题

首先,你遇到的核心问题是错误地把函数SYSDATETIME()塞进了ODBC时间戳字面量{ts ...}里——{ts}这个语法只能包裹固定的日期字符串,根本不能嵌入动态函数。下面针对你的需求给出具体的解决方案:

1. 用对当前日期函数

不同数据库对当前日期函数的支持略有区别,在ODBC查询里优先选通用标准函数或者目标数据库的内置函数:

  • 通用ODBC标准:CURRENT_TIMESTAMP
  • SQL Server:GETDATE() 或 SYSDATETIME()(直接写就行,别套{ts})
  • MySQL:NOW()

这里我们用CURRENT_TIMESTAMP来保证兼容性。

2. 修正完整查询语句

结合你要筛选「当前日期介于开始/结束日期之间」的需求,同时处理空值、0值对应的特殊日期,修改后的查询如下:

SELECT 
    BOMD.BOMQTY_0, 
    BOMD.UPDDAT_0, 
    BOMD.BOMSTRDAT_0, 
    BOMD.BOMENDDAT_0 
FROM myDB.BOMD BOMD 
WHERE 
    BOMD.UPDDAT_0 > {ts '2018-01-01 00:00:00'} 
    AND (
        BOMD.BOMSTRDAT_0 < CURRENT_TIMESTAMP 
        OR BOMD.BOMSTRDAT_0 = {ts '1899-12-31 00:00:00'}  -- 对应Excel里值为0的特殊日期
        OR BOMD.BOMSTRDAT_0 IS NULL
    ) 
    AND (
        BOMD.BOMENDDAT_0 > CURRENT_TIMESTAMP 
        OR BOMD.BOMENDDAT_0 = {ts '1899-12-31 00:00:00'}
        OR BOMD.BOMENDDAT_0 IS NULL
    )

3. 关键细节解释

  • 为什么用1899-12-31代替0?:Excel里值为0对应的00/01/1900是个不存在的日期,多数数据库会把它转换成1899-12-31,用这个标准值做比对更可靠。
  • 别再给函数套{ts}:{ts 'yyyy-mm-dd hh:mm:ss'}是用来表示固定时间戳的语法,只能放静态字符串,动态的当前日期直接调用数据库函数就好。
  • 逻辑顺序要清晰:先处理正常的日期比较,再覆盖特殊值和空值的场景,避免逻辑混乱。

额外调试小技巧

如果还是有问题,可以试试这两步:

  • 单独测试当前日期函数:比如执行SELECT CURRENT_TIMESTAMP,看看返回的格式是否和你的日期字段类型匹配。
  • 检查字段存储类型:确保BOMSTRDAT_0和BOMENDDAT_0是datetime/timestamp类型,要是存成字符串的话,得用CONVERT这类函数做格式转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:40:07