sql - Presto 默认日期显示不正确
问题描述
presto> 选择日期'0001-01-01';
预期结果:'0001-01-01'
实际结果:'0001-01-02'
天增加了一个不知道为什么。
谁能帮我解决这个问题?
如果我在 presto-cli 上运行上述查询,则结果为“0001-01-01”,这是预期的,但是当我通过 SQL 工作台运行相同的查询时,结果为“0001-01-02”,这是实际结果。
解决方案
这是因为 Presto 在内部将 Joda Time 和 Java Time 用于服务器 API 和 JDBC 使用(根据 JDBC 标准)java.sql.Date
和相关类。
Joda Time 和 Java Time 都使用预测的公历。这意味着他们计算天数就好像公历从那时起就存在一样。
java.sql.Date
(java.util.Calendar
就此而言)使用儒略历,这似乎更准确。它解释了一个事实,即儒略历一直使用到某一天,然后公历过去和现在仍在使用。(当然,它不准确也不可能准确,因为截止日期因国家而异,跨越几个世纪)。
我的建议是:varchar
用于表示历史日期和日期时间。
推荐阅读
- python - 如何使用 selenium 选择搜索建议?该网站阻止我点击提交,需要选择
- android - 使用 jniRegisterNativeMethods 在带有 Kotlin 的 Android Studio 中注册方法而不是长 JNI 名称?
- android - 从 Play 商店下载时应用程序未加载但安装生成的 APK 工作正常
- r - R tmap-package 图例标题在 tm_lines 和
- python - AttributeError:模块“tensorflow.python.keras”没有属性“abs”
- python - 正则表达式:如果字符被转义,则解析不同
- objective-c - 如何从 SourceViewController 访问 DetailViewController 方法;都在 NSSplitViewController (Objective-C) 中
- c# - 如何在 asp.net mvc 中创建 DropdownlistFor?
- java - java.lang.NoClassDefFoundError: org/apache/ivy/core/module/descriptor/DependencyDescriptor
- python - Python:如何在临时目录创建虚拟环境并使用 pip 安装模块