2016-02-14 71 views
-2

我一直在想 - 我的系統上有很多與sysdate一起使用,並且在將它與我的日期列進行比較時,我必須使用trunc(sysdate),因爲sysdate的格式爲DD/MM/YYYY HH24:MI:SSOracle - 獲取當前日期格式

我看着在互聯網上的其他功能回到上DD/MM/YYYY格式當前日期,但沒有運氣,current_date , current_timestamp和ETC也給了我個小時格式..

我需要這個性能更佳的索引時日期列到當前日期。

那麼,有誰知道一個系統函數返回所需的格式?或者一種繞過它的方式?

+1

如果你總是使用'trunc()',那麼你爲什麼不只是索引「trunc'ed」值呢? –

+0

我總是在sysdate上使用trunc,而不是在列上,列值已經被截斷了。 @a_horse_with_no_name – sagi

+2

那麼性能問題是什麼? –

回答

-1

您可以更改變量NLS_DATE_FORMAT。

ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY'; 

http://www.dba-oracle.com/t_nls_date_format.htm

+0

不會這樣做,我不是直接使用oracle,所以它不會幫助我改變會話(通過informatica使用) – sagi

+1

只會改變_display_格式(或者爲惡意隱式數據類型轉換假定的格式)。它不會**從實際日期值中刪除時間部分。 –

2

看看你的「日期」一欄爲DATE類型的,那麼你就不需要用「格式」有關。您需要將trunc(column_name)與trunc(sysdate)進行比較。如果由於使用某個函數而導致使用該索引而導致嚴重的性能問題,則創建一個基於函數的索引。一個不太雅緻的解決辦法是

WHERE mydatecol> TRUNC(SYSDATE) 和mydatecol < TRUNC(SYSDATE +1)

你不想要做的就是迷惑日的二元概念與字符串表示一個日期。字符串只是一個字符串,作爲人們可以識別的數據,但對計算機來說,'2016-02-14'沒有'hereisyoursign'的意思。