Java 与带有时间戳的\u日期(CurrentDate)进行比较
我只想将我的当前日期与timestamp字段仅日期而非时间进行比较,但它不会与它进行比较,因为查询变成这样。我该怎么做呢 查询: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
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
,或者更好地使用四位数字,即