【问题标题】:Date format in hqlhql中的日期格式
【发布时间】:2013-11-21 14:00:00
【问题描述】:

我喜欢hql

hql="SELECT DISTINCT C FROM Client C 
WHERE lower(str(C.name)) like '%"+sSearch
+ "%' OR str(day(C.birthday)) like '%"+sSearch "%';

如您所见,我可以在我的表中搜索 sSearch。

但问题是 sSearch 可以有 dd.MM.yyyy 格式或者不能是日期(例如 sSearch="John"),并且 DATE 类型在 DB 中有 yyyy-MM-dd 格式。

我想选择所需格式 dd.MM.yyyy 的日期作为字符串以使用表达式“like”。

谢谢。

解决了这个问题

hql="SELECT DISTINCT C FROM Client C 
WHERE lower(str(C.name)) like '%"+sSearch
+ "%' OR concat(str(day(C.birthday)),'.',str(month(C.birthday)),'.',
str(year(C.birthday))) like '%"+sSearch "%';

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    您可以使用 Dateformat 来格式化日期字符串。

    DateFormat dateFormat1 = new SimpleDateFormat("dd.MM.yyy");
    DateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");
    Date d = dateFormat1.parse(sSearch);
    
    hql="SELECT DISTINCT C FROM Client C 
    WHERE lower(str(C.name)) like '%"+sSearch
    + "%' OR str(day(C.birthday)) like '%"+ dateFormat2.format(d) +"%';
    

    【讨论】:

      【解决方案2】:

      如果你使用mysql,你可以使用mysql,你可以使用date_format。

      "select dictinct c from Client c where lower(str(C.name)) like '%" + sSearch + "%' or
      date_format(C.birthday,'%d.%m.%Y') lkie '%" + sSearch +"%'"
      

      但我更喜欢在服务层或控制器层将 sSearch 转换为字符串,例如“yyyy-MM-dd”,尽管我可以使用这样的代码。

      " ... C.birtyday like '%"+ sSearch + "%'"
      

      【讨论】:

      • 特定于数据库的 SQL 与 HQL 无关
      猜你喜欢
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2012-11-14
      • 2019-05-04
      • 2018-01-28
      • 2010-11-03
      • 2017-12-17
      • 1970-01-01
      相关资源
      最近更新 更多