hql中的日期格式

时间:2013-11-21 14:00:00

标签: java hibernate hql

我有像

这样的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 "%';

2 个答案:

答案 0 :(得分: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) +"%';

答案 1 :(得分:-1)

如果你使用的是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 + "%'"