首页 > 解决方案 > Excel中ODBC中的日期和时间戳与今天的比较?

问题描述

问题

我正在通过 Excel ODBC 查询数据库。

我可以将该字段与的 Excel 的 ODBC 查询中的硬编码日期进行比较:

BOMD.BOMENDDAT_0 > {ts '2018-05-05 00:00:00'}

我似乎无法与当前日期进行适当的比较

BOMD.BOMENDDAT_0 > {ts SYSDATETIME()}
DATEDIFF(d, SYSDATETIME(), BOMD.BOMENDDAT_0) > 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 < {ts SYSDATETIME()})
    OR BOMD.BOMSTRDAT_0 = 0
    OR BOMD.BOMSTRDAT_0 is null
    )
AND (
    (BOMD.BOMENDDAT_0 > {ts SYSDATETIME()})
    OR BOMD.BOMENDDAT_0 = 0
    OR BOMD.BOMENDDAT_0 is null
    )

标签: sqlexceltsqlodbc

解决方案


{ts '2018-05-05 00:00:00'}用于将字符串转换为日期时间数据类型,您不能使用它SYSDATETIME()已经是日期时间(确切地说是日期时间2)数据类型,只需使其:

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 < SYSDATETIME())
    OR BOMD.BOMSTRDAT_0 = 0
    OR BOMD.BOMSTRDAT_0 is null
    )
AND (
    (BOMD.BOMENDDAT_0 > SYSDATETIME())
    OR BOMD.BOMENDDAT_0 = 0
    OR BOMD.BOMENDDAT_0 is null
    )

顺便说一句,您的代码还将返回BOMENDDAT_0BOMSTRDAT都是零或空值的行,这真的是预期的行为吗?


推荐阅读