0

我有以下情况:

WHERE ORDER_DATE >= TO_DATE (CURRENT_DATE, 'YYYY-MM-DD')

左侧部分 ( ORDER_DATE) 存储为 a VARCHAR,右侧部分为 a DATE。当我运行代码时,我没有错误;意味着 aVARCHAR和 a之间的比较DATE正在工作。我觉得VARCHAR是转换成 aDATE然后应用比较运算符;当我有'0000-00-00'数据时,ORDER_DATE它会返回格式错误(data exception - invalid value for YYYY format token; Value: '0000-00-00')。有人可以证实我的假设是正确的吗?

*是的,我知道我应该存储或转换我VARCHAR的 a DATE,然后在两者之间进行比较DATE,这就是我所做的。但是,我注意到了这个特殊性,我想了解背后的原因!

4

1 回答 1

0

你有很多奇怪的事情发生。在转换方面:

WHERE ORDER_DATE >= TO_DATE(CURRENT_DATE, 'YYYY-MM-DD')
----------------------------^ CURRENT_DATE is converted to a string because TO_DATE() expects a string as the first argument
--------------------^ TO_DATE then converts the string to a date using the specified format
-----------------^ The comparison converts the ORDER_DATE to a date (and you might get a type conversion error).

注意:这是基于标准 SQL 的规则。我假设 Exasol 遵循这些规则(在数据库中是一致的)。

据推测,您ORDER_DATE的格式为 YYYY-MM-DD。如果是这样,比较安全,您可以使用:

ORDER_DATE >= TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD')
于 2021-08-18T21:31:02.250 回答