簡體   English   中英

在sql命令中比較日期

[英]compare date in sql command

我的數據庫將日期保存為此格式5/29/2015 12:07:58.000000 AM 我從用戶輸入的日期為5/29/2015 12:07:58格式。 我可以只比較日/月/年,而不是sql命令中的整行嗎? 我的數據庫是oracle,格式為TIMESTAMP。 任何人有任何想法怎么做?

我的數據庫將日期保存為此格式5/29/2015 12:07:58.000000 AM

否。 日期/時間戳沒有任何格式 Oracle不會以您看到的格式存儲日期/時間戳。 您看到的格式僅用於顯示目的。 日期在內部以Oracle專有格式7字節存儲

我可以只比較日/月/年,而不是sql命令中的整行嗎?

當然可以。 您可以使用TRUNC截斷時間部分,只保留日期部分,而數據類型保留為日期。

例如,

SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;

MY_TMSTMP
----------
2015-05-29

我從用戶輸入的日期為5/29/2015 12:07:58格式。

因此,您將以這種格式將用戶輸入作為字符串 您需要先使用TO_DATE 轉換為DATE,然后進行比較。

例如,

WHERE TRUNC(dt_column) < TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')

正如我已經說過的,如果您想忽略時間部分,請應用TRUNC

但是,在日期上應用TRUNC會抑制該列上的任何常規索引 從性能角度來看,最好使用Date范圍條件

例如,

WHERE dt_column
BETWEEN 
        TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')
AND     
        TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') +1

我假設您在數據庫中的記錄和用戶輸入都是時間戳。 您可以使用TRUNC函數獲取此值的日期並使用它進行比較

declare v_tsdate DATE; v_txdate DATE; begin v_tsdate := TRUNC( CAST('5/29/2015 12:07:58.000000 AM' as DATE) ); v_txdate := TRUNC( CAST('5/29/2015 12:07:58' as DATE) ); --do the comparision and conditions you need with v_tsdate and v_txdate end;

之所以將其轉換為DATE格式,是因為TRUNCT(Timestamp)理論上是TRUNC(CAST(Timestamp AS DATE))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM