sql - 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
有什么建议吗?
语境
我正在尝试构建一个查询,仅选择今天日期介于以下之间的记录:
- 开始日期 (
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
)
解决方案
{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_0
和BOMSTRDAT
都是零或空值的行,这真的是预期的行为吗?
推荐阅读
- python - Linux 的 Windows 子系统 (WSL) 是否支持 Python psutil 使用的 cpufreq?
- react-native - 在 url 中反应原生 getparam
- autodesk-forge - Autodesk forge 查看器:有没有办法增加查看器的超时以加载多个模型/大型模型
- django - 尝试使用reportlab生成pdf时出现404
- configuration - 六边形架构/端口和适配器:具有多个驱动程序适配器的应用程序配置
- matlab - 从系统 ID 工具箱更改使用 compare() 创建的绘图的颜色
- php - 如何不在简单表格中显示列标题?
- arrays - 在swift中分别对两个字符串数组进行排序
- java - Mvel 表达式编译通过但评估失败
- selenium - 我们可以将 testng.xml 的名称更改为其他名称吗?而不是 testng.xml,我可以让它像 myproject.xml 一样吗?