繁体   English   中英

将to_date(CurrentDate)与时间戳进行比较

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM