当我在sparksql中运行配置单元查询时,lhs( timestamp
) <=
右侧( date
)对于相同的值 '2013-09-30'
不是平等对待。鉴于 CAST
的 TIMESTAMP
在rhs中效果很好。
> SELECT CASE
WHEN CAST(ADD_MONTHS(CAST('2013-09-30' AS DATE), +1) AS TIMESTAMP) <= ADD_MONTHS(CAST('2013-09-30' AS DATE), +1)
THEN 'less than or equal'
ELSE 'greater'
END AS TIMESTAMP_LTE_DATE
FROM
VALUES(1);
+---------------------+--+
| TIMESTAMP_LTE_DATE |
+---------------------+--+
| greater |
+---------------------+--+
我们有那么多的表达方式 DATE
以及 TIMESTAMP
所有查询的组合都将动态生成。所以,很难找到 CAST
所有位置的列或值。
有没有一种方法可以自动将表达式中的rhs/lhs转换为hive/sparksql中更高的数据类型(类型强制)?
在oracle11g中也尝试过类似的查询,效果很好 equal
.
感谢你的帮助!!
1条答案
按热度按时间yws3nbqq1#
的类型强制规则
TimestampType
/DateType
比较是硬编码的,并将双方转换为StringType
:对于字典排序的日期表示法,日期表示法先于同一日期的时间戳表示法。