oracle 里比较date类型时,好像默认只比较 日期 而不比较 时间,下面写个用hql语句oracle数据库,比较date类型的日期时间的测试类:
package test;
import java.util.Date;
/**
* hql语句 比较 oracle 的日期时间 的写法
*
* @author space
* @date 2008-12-25 17:23:54
*/
public class OracleHqlDateTimeCompare {
public static void main(String[] args) {
System.out.println(getHqlForDateTime(new Date(), "yyyy-MM-dd HH:mm", "yyyy-mm-dd hh24:mi"));
}
/**
* 生成 “求 用户注册 日期时间 在 指定 日期时间 之前的用户总和” 的 hql 语句
* @param d
* @param toDateString
* @return
*/
private static String getHqlForDateTime(Date d, String format, String hqlFormat) {
return "SELECT COUNT(*) FROM user u WHERE u.cdate <= " + toDate(d, format, hqlFormat);
}
/**
* 将日期转化成 oracle 的 to_date('xxx','xxx') 格式
*
* @param d 日期
* @param format 日期格式,例如 "yyyy-MM-dd HH:mm"
* @param hqlFormat oracle的日期格式,例如:"yyyy-mm-dd hh24:mi"
* @return
*/
private static String toDate(Date d, String format, String hqlFormat) {
StringBuffer bf = new StringBuffer();
bf.append("to_date('");
bf.append(dateFormat(d, format));
bf.append("','");
bf.append(hqlFormat);
bf.append("')");
return bf.toString();
}
/**
* 将日期转化成指定格式的字符串
*
* @param d 日期
* @param formatStr 字符串格式
* @return
*/
private static String dateFormat(Date d, String formatStr) {
return (new java.text.SimpleDateFormat(formatStr).format(d));
}
}
和当前日期进行比较的例子:
package space;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) {
/**
* 该 hql 语句从oracle数据库中获得所有 创建在当前日期之前的用户;
* 注:oracle 将字符串转化成date类型函数是 to_date('2008-07-01','yyyy-MM-dd HH24:mi:ss')
*/
String dateCompareHql = "FROM user u where u.cdate <= to_date('" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())
+ "','yyyy-MM-dd HH24:mi:ss')";
}
}