hql oracle 比较 日期时间

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')";
	}
}

 

 

你可能感兴趣的:(java)