2013-11-21 164 views
1

我已经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类型在数据库中有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 "%'; 

回答

-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 + "%'" 
+0

数据库特定的SQL与HQL无关 – manuna

0

您可以使用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) +"%';