DATE 和 VARCHAR 之间的比较:它是如何工作的?

Comparison between a DATE and a VARCHAR: How does it work?

我有以下情况:

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

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

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

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

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')