我有像
这样的hqlhql="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 "%';
答案 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 + "%'"