Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hql中的日期格式_Java_Hibernate_Hql - Fatal编程技术网

Java hql中的日期格式

Java hql中的日期格式,java,hibernate,hql,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,而日期类型在DB中是yyyy-MM-dd格式 我想选择dd.M

我有一个类似的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,而日期类型在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 "%';

如果你使用的是mysql,你可以使用mysql,你可以使用date_格式

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

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

特定于数据库的SQL与HQL无关