天天看點

ORACLE中DATE格式遇到的坑,根據時間查詢不到時間隻有年月日的資料

記一次Oracle時間格式遇到的坑

當Oracle中的字段類型為date,入庫時間為 yyyy-mm-dd 00:00:00 時,Oracle存儲的記錄為 yyyy-mm-dd

ORACLE中DATE格式遇到的坑,根據時間查詢不到時間隻有年月日的資料

在根據對應時間查詢該資料的時候,在資料庫查詢正常,資料可以查詢到:

ORACLE中DATE格式遇到的坑,根據時間查詢不到時間隻有年月日的資料

在Java代碼執行該查詢時,沒有 時分秒的資料查詢不出來(具體原因未知,有知道原因的大佬麻煩給指點指點,小子給您抱拳了!)

猜測1:在Java代碼擷取時間時(拼接年月日時分秒),時間毫秒數是 > 當日 00:00:00 的毫秒數:

ORACLE中DATE格式遇到的坑,根據時間查詢不到時間隻有年月日的資料
開始時間毫秒:1615910400494

需要查詢的時間:2021-03-17

當日年月日轉毫秒:1615910400000
           

驗證:代碼将擷取到的時間取其年月日,轉為淩晨毫秒數,再将該毫秒數作為入參(為啥轉來轉去的是因為代碼擷取到的時間不一定是哪一天,是以直接取擷取到的年月日轉來轉去是最友善的)

在将該毫秒數作為入參傳入後,還是查詢不到該資料(yyyy-mm-dd 沒有時分秒的資料 <括弧>哔了G了</括弧>)!

解決方案:簡單暴力 +1s

/**
 * 當時間(xxxxx.getReqDate())為當天 00:00:00 時,入庫資料隻有 年月日(yyyy-mm-dd)
 * <p>導緻查詢的時候查不到該資料,當有該記錄</p>
 * 故而 在時間為 00:00:00 時 +1s 。
 * 加一秒不會出現問題:當時間為00:00:00時,必然是當日時間(即 日期不會變),+1s 沒有實際影響
 */
// xxxxx.getReqDate() 格式為:20200101000000
String requestTime = xxxxx.getReqDate();
if (requestTime.endsWith("000000")) {
    requestTime = String.valueOf(Long.parseLong(requestTime) + 1);
}
xxxxx.setRequestTime(currentDate);
           

問題解決