Java 与带有时间戳的\u日期(CurrentDate)进行比较

Java 与带有时间戳的\u日期(CurrentDate)进行比较,java,sql,database,oracle,timestamp,Java,Sql,Database,Oracle,Timestamp,我只想将我的当前日期与timestamp字段仅日期而非时间进行比较,但它不会与它进行比较,因为查询变成这样。我该怎么做呢 查询: SELECT com.PHONE_NUMBER FROM communication com WHERE com.COMMUNICATION_DATE = TO_DATE('23-11-15', 'dd-MM-yy') DB表字段值: 02-NOV-15 18.56.00.000000000 功能: public static String getCurr

我只想将我的当前日期与timestamp字段仅日期而非时间进行比较,但它不会与它进行比较,因为查询变成这样。我该怎么做呢

查询:

SELECT com.PHONE_NUMBER
FROM communication com
WHERE com.COMMUNICATION_DATE = TO_DATE('23-11-15', 'dd-MM-yy')
DB表字段值:

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);
    }
其中com.COMMUNICATION_DATE=截止日期('23-11-15','dd-MM-yy')

相等运算符将无法获取具有时间部分的行

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
WHERE com.COMMUNICATION_DATE >= DATE '2015-11-23'
AND   com.COMMUNICATION_DATE <  DATE '2015-11-23' +1
您可以在日期列上使用TRUNC,但是,这将禁止在日期列上使用任何索引

正确有效的方法是使用日期范围条件,以便在日期列上使用任何常规的索引

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
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
SQL>SELECT*
2从双
3其中SYSTIMESTAMP>=日期“2015-11-23”
4和SYSTIMESTAMP<日期'2015-11-23'+1;
D
-
X
注意:实际上,几乎不可能将实际日期与毫秒与存储日期匹配

更新:

public static void main(String[] args) throws Exception {
    String date = "23-NOV-15 18.56.00.000000000";
    System.out.println(isEqualDate(date));
}
true

我只是想比较一下日期而不是时间


然后,获取一个
日历的实例
以获取今天的日期,将字段设置为零(小时、分钟等),并与
SimpleDataFormat
仅提取日期进行比较:

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));
}
true
输出:

public static void main(String[] args) throws Exception {
    String date = "23-NOV-15 18.56.00.000000000";
    System.out.println(isEqualDate(date));
}
true

你试过使用时间戳功能吗?我只是想比较日期而不是时间。它能帮你吗。您可以简单地使用TRUNC。@MuhammadMuazzam使用TRUNC不会在日期列上使用任何索引。所以,最好使用我已经展示过的日期范围条件。它可能会出现错误:SQL错误:ORA-01830:日期格式图片在转换整个输入之前结束string@MuhammadMuazzam为什么?这是不可能的。我添加了一个演示,请参见答案。@MuhammadMuazzam:使用此答案中的SQL,不可能显示该错误。
'2015-11-23'+1
包括'2015-11-24 00:00:00'。我们不知道这是否是OP想要的。最好使用
TRUNC(com.COMMUNICATION_DATE)=日期“2015-11-23”
介于截止日期(“23-11-15”,“dd-MM-RR”)和截止日期(“23-11-15 23:59:59”,“dd-MM-RR hh24:mi:ss”)
:如果您只使用两位数字,也可以使用
RR
而不是
YY
,或者更好地使用四位数字,即yyyyyyyyy@wernfrieddheit Yes,我不应该在这两者之间使用。我的意思是等等。。这不是和日期算术有关的SQL问题吗?或者我遗漏了什么?等等,您还可以看到一个java方法将字符串转换为日期?或者您忽略了问题中您不感兴趣的部分?我只是真诚地问您,它是否同时依赖于SQL和Java?因为这会使我们的答案不完整。无意冒犯@LalitKumarB您可以通过多种方式解决编程问题,在这里您可以找到使用本机sql或使用Java处理这些结果的解决方案,没有不完整的答案,只有两种方法可以做同样的事情……好的,谢谢。我很想知道,因为我对Java一无所知。