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