2013-11-21 205 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) +"%';