Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 配置单元:日期范围未从表中提取数据_Sql_Date_Datetime_Hive_Hiveql - Fatal编程技术网

Sql 配置单元:日期范围未从表中提取数据

Sql 配置单元:日期范围未从表中提取数据,sql,date,datetime,hive,hiveql,Sql,Date,Datetime,Hive,Hiveql,我是这个平台的新手。试图在蜂箱中完成一项任务,但未能完成 有一个具有以下结构的表: 表1: ID DATE VAL1 VAL2 VAL3 01 12/12/2017 12.23 56.45 78.9 02 05/06/2019 65.88 65.22 98.22 03 09/08/2018 86.00 23.00 56.05 04 09/19/2019 34.09 75.04 77.89 05 03/16/2018 87.45 45.56 89.89 06 06/06/2018

我是这个平台的新手。试图在蜂箱中完成一项任务,但未能完成

有一个具有以下结构的表:

表1:

ID DATE       VAL1  VAL2  VAL3
01 12/12/2017 12.23 56.45 78.9
02 05/06/2019 65.88 65.22 98.22
03 09/08/2018 86.00 23.00 56.05
04 09/19/2019 34.09 75.04 77.89
05 03/16/2018 87.45 45.56 89.89
06 06/06/2018 67.66 45.00 67.90
07 01/01/2018 23.21 90.99 56.33
08 07/03/2018 67.22 67.22 33.11
09 05/13/2017 12.12 98.33 78.89
数据类型:

ID   INT
DATE STRING
VAL1 DOUBLE
VAL2 DOUBLE
VAL3 DOUBLE
Hive查询:

SELECT * FROM Table1 WHERE DATE BETWEEN date_format(current_date + 
interval '-12' month,'MM/dd/YYYY') AND 
date_format(current_date,'MM/dd/YYYY');
上述查询不是从表中提取记录

实际O/p:

OK
Time taken: 65.515 seconds
hive>
ID DATE       VAL1  VAL2  VAL3
02 05/06/2019 65.88 65.22 98.22
03 09/08/2018 86.00 23.00 56.05
04 09/19/2019 34.09 75.04 77.89
06 06/06/2018 67.66 45.00 67.90
08 07/03/2018 67.22 67.22 33.11
预期O/p:

OK
Time taken: 65.515 seconds
hive>
ID DATE       VAL1  VAL2  VAL3
02 05/06/2019 65.88 65.22 98.22
03 09/08/2018 86.00 23.00 56.05
04 09/19/2019 34.09 75.04 77.89
06 06/06/2018 67.66 45.00 67.90
08 07/03/2018 67.22 67.22 33.11

任何指出查询中错误或遗漏部分的帮助都将非常有用。提前感谢。

首先将
[Date]
列中的数据类型更新为表中的
日期或日期时间。
然后执行这个查询

SELECT * FROM Table1 WHERE DATE BETWEEN Fromdate AND Todate

您使用的格式不正确。正确的格式是
'MM/dd/yyyy'
,而不是
'MM/dd/yyyy'
。您的日期不是可排序格式,这就是为什么在应用
之间的
过滤器之前,需要将列日期转换为可排序格式
'yyyy-MM-dd'

SELECT * 
  FROM Table1 
 WHERE from_unixtime(unix_timestamp(`DATE`,'MM/dd/yyyy'),'yyyy-MM-dd') BETWEEN add_months(current_date,-12) AND current_date;

为了更好的理解,考虑这个例子,比较两个不可排序格式的日期:

hive> select '09/19/2018' > '08/01/2019'; --bad data format
OK
true
Time taken: 5.632 seconds, Fetched: 1 row(s)
这就是为什么
之间的
操作员会在这样的日期下工作不正确的原因

让我们以正确的格式比较相同的日期:

hive> select '2018-09-19' > '2019-08-01';
OK
false
Time taken: 0.095 seconds, Fetched: 1 row(s)
另请参见类文档作为格式模板参考