我希望能够编写查询,其中仅返回具有由列表中的一个或多个日期组成的特定字段值的记录。
例如(我认为这会起作用,但事实并非如此):
select * from someDatabase.someTable where dateField in ('2017-11-10','2017-11-14','2017-11-28');
所以我希望这只会返回 dateField 包含任何一个或多个或所有日期的记录('2017-11-10','2017-11-14','2017-11-28')
当我运行这样的查询时,我收到错误:
FAILED: SemanticException [Error 10014]: Line 1:105 Wrong arguments ''2017-11-20'': The arguments for IN should be the same type! Types are: {date IN (string, string)}
任何帮助将不胜感激。谢谢。
您需要使用CAST
函数将IN
内的参数转换为date
。
CAST( expression AS type )
这是您的查询方式:
select * from someDatabase.someTable where dateField in (cast('2017-11-10' as date),cast('2017-11-14' as date),cast('2017-11-28' as date))
你能使用以下方法检查表格的结构吗:
describe extended someDatabase.someTable;
这看起来像是数据类型不匹配错误,因为您的日期字段似乎是地图而不是日期。
理想情况下,日期比较如下(现在无法测试语法):
select * from someDatabase.someTable where dateField in ((from_unixtime(unix_timestamp('2017-11-10', 'YYYY-MM-dd'),'YYYY-MM-dd'),(from_unixtime(unix_timestamp('2017-11-14', 'YYYY-MM-dd'),'YYYY-MM-dd'),(from_unixtime(unix_timestamp('2017-11-28','YYYY-MM-dd'));