将配置单元日期称为date '2020-08-25'
与仅将'2020-08-25'
而不包含日期一词有什么区别?是两种不同的数据类型吗?还是这些完全一样。我可能会在如下的where语句中输入以下内容:
where somedate<=date'2020-08-25'
vs。
where somedate<='2020-08-25'
答案 0 :(得分:0)
date'2020-08-25'
是标准日期文字:它生成date
数据类型的合法值。
另一方面,'2020-08-25'
是文字 string (代表日期,但可以是其他任何东西)。
现在,where
子句中谓词的最佳选择是什么?这取决于您要比较的列的数据类型。
如果您有date
列,那么我建议使用文字日期。否则,您将依靠数据库的功能来理解您的意思,并将字符串隐式转换为日期。每个数据库都有一套自己的规则来处理这种情况:在最坏的情况下,它可能做出错误的决定并决定进行字符串比较,这将需要将所有存储的值转换为字符串(这取决于有关数据库规范的信息)-这会破坏查询的性能。
如果您碰巧将日期存储为字符串(通常表示设计不好),那么字符串比较就可以了。
答案 1 :(得分:0)
date '2020-08-25'
是DATE类型的文字。
'2020-08-25'
-是字符串文字。
字符串和日期可以隐式转换,因此您的where子句在功能上是相同的。根据列数据类型,可能会发生隐式转换。最好使用相同的类型,以避免隐式转换。
DATE还可以4字节整数形式打包成二进制格式。参见HIVE-3910