巢状日期:日期“ yyyy-MM-dd”与“ yyyy-MM-dd”有什么区别?

问题描述

将配置单元日期称为date '2020-08-25'与仅将'2020-08-25'而不包含日期一词有什么区别?是两种不同的数据类型吗?还是这些完全一样。我可能会在如下的where语句中输入以下内容

where somedate<=date'2020-08-25'

vs。

where somedate<='2020-08-25'

解决方法

date'2020-08-25'标准日期文字:它生成date数据类型的合法值。

另一方面,'2020-08-25'是文字 string (代表日期,但可以是其他任何东西)。

现在,where子句中谓词的最佳选择是什么?这取决于您要比较的列的数据类型。

如果您有date列,那么我建议使用文字日期。否则,您将依靠数据库的功能来理解您的意思,并将字符串隐式转换为日期。每个数据库都有一套自己的规则来处理这种情况:在最坏的情况下,它可能做出错误的决定并决定进行字符串比较,这将需要将所有存储的值转换为字符串(这取决于有关数据库规范的信息)-这会破坏查询的性能。

如果您碰巧将日期存储为字符串(通常表示设计不好),那么字符串比较就可以了。

,

date '2020-08-25'是DATE类型的文字。

'2020-08-25'-是字符串文字。

字符串和日期可以隐式转换,因此您的where子句在功能上是相同的。根据列数据类型,可能会发生隐式转换。最好使用相同的类型,以避免隐式转换。

DATE还可以4字节整数形式打包成二进制格式。参见HIVE-3910