在Excel中的ODBC中与今天的日期和时间戳进行比较?

时间:2018-05-14 13:44:20

标签: sql excel tsql 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

有任何建议吗?

上下文

我正在尝试构建一个查询,只选择今天的日期介于:

之间的记录
  • 开始日期(BOMD.BOMSTRDAT_0
  • 结束日期(BOMD.BOMENDDAT_0

那些日期:

  • 采用特殊格式,在Excel中显示如下:'26/02/2018 00:00:00'
    (法语格式,日月年
  • 可以填写
  • 0似乎是'00/01/1900 00:00:00'

整个查询如下所示:

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
    )

1 个答案:

答案 0 :(得分:1)

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

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为零或空的行,真的预期的行为?