[英]Compare to_date(CurrentDate) with timestamp
我只想将当前日期与timestamp字段进行比较,仅将日期而不是时间进行比较,但不能与之进行比较,因为查询变成了这样。 我该如何帮助您
查询:
SELECT com.PHONE_NUMBER
FROM communication com
WHERE com.COMMUNICATION_DATE = TO_DATE('23-11-15', 'dd-MM-yy')
数据库表字段值:
02-NOV-15 18.56.00.000000000
功能:
public static String getCurrentDate() throws ParseException
{
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yy");
Date date = new Date();
return dateFormat.format(date);
}
注意:实际上,几乎不可能将实际日期(毫秒)与存储的日期进行匹配。
更新:
我只想比较日期而不是时间
然后,获取Calendar
的实例以获取今天的日期,将字段设置为零(小时,分钟等),并与仅提取日期的SimpleDateFormat
进行比较:
public static boolean isEqualDate(String toCompare) throws Exception {
DateFormat df = new SimpleDateFormat("dd-MMM-yy");
Date toCompareDate = df.parse(toCompare);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return toCompareDate.equals(calendar.getTime());
}
执行示例:
public static void main(String[] args) throws Exception {
String date = "23-NOV-15 18.56.00.000000000";
System.out.println(isEqualDate(date));
}
OUTPUT:
true
WHERE com.COMMUNICATION_DATE = TO_DATE('23 -11-15','dd-MM-yy')
等于运算符将无法获取具有时间部分的行。
您可以在日期列上使用TRUNC ,但是,这会抑制日期列上的任何索引使用。
正确而有效的方法是使用日期范围条件 ,以便它将在date列上使用任何常规索引 。
WHERE com.COMMUNICATION_DATE >= TO_DATE('23-11-15', 'dd-MM-yy')
AND com.COMMUNICATION_DATE < TO_DATE('23-11-15', 'dd-MM-yy') +1
另外,当您只处理没有任何时间部分的日期元素时,请使用ANSI日期文字 ,该文字使用固定格式'YYYY-MM-DD'
因此它是NLS独立的 。
WHERE com.COMMUNICATION_DATE >= DATE '2015-11-23'
AND com.COMMUNICATION_DATE < DATE '2015-11-23' +1
一个简单的演示:
SQL> SELECT *
2 FROM dual
3 WHERE SYSTIMESTAMP >= DATE '2015-11-23'
4 AND SYSTIMESTAMP < DATE '2015-11-23' +1;
D
-
X
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.