【问题标题】:HQL/SQL - Return records that have any one of multiple values in a date fieldHQL/SQL - 返回在日期字段中具有多个值中的任何一个的记录
【发布时间】:2017-11-28 00:28:24
【问题描述】:

我希望能够编写查询,其中仅返回具有由列表中的一个或多个日期组成的特定字段值的记录。

例如(我认为这会起作用,但事实并非如此):

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)}

非常感谢任何帮助。谢谢。

【问题讨论】:

    标签: sql hibernate date hql


    【解决方案1】:

    您需要使用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))
    

    【讨论】:

    • 这正是我所需要的。谢谢!
    【解决方案2】:

    您能否使用以下方法检查表的结构:

    describe extended someDatabase.someTable;
    

    这看起来像是数据类型不匹配错误,因为您的 dateField 似乎是 Map 而不是 Date。

    理想的日期比较如下(目前无法测试语法):

    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'));
    

    【讨论】:

    • 数据类型被列为相关字段的“日期”。
    • @Dr.Tautology 选择转换中的转换字符串 'YYYY-MM-DD' 应该与您的 dateField 的格式匹配。
    猜你喜欢
    • 2013-04-14
    • 2023-03-22
    • 2019-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多