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
。
当我 运行 我的代码没有错误;这意味着 VARCHAR
和 DATE
之间的比较有效。
我觉得 VARCHAR
在 DATE
中转换,然后应用比较运算符;当我在 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')
我有以下情况:
WHERE ORDER_DATE >= TO_DATE (CURRENT_DATE, 'YYYY-MM-DD')
左边的部分(ORDER_DATE
)存储为VARCHAR
,右边的部分为DATE
。
当我 运行 我的代码没有错误;这意味着 VARCHAR
和 DATE
之间的比较有效。
我觉得 VARCHAR
在 DATE
中转换,然后应用比较运算符;当我在 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')