我在Oracle DB中有一列是varchar2數據類型。存儲在此列中的典型值類似於06/16/2015 02:14:18 AM。
第一個問題是,爲什麼你存儲DATE爲串?使用適當的數據類型是數據庫設計和性能的最重要部分之一。
明白日期沒有格式你看,這是存儲在內部7 bytes
這是Oracle專有的格式。不建議將日期存儲爲字符串以具有固定格式。
我會建議首先修復設計,以便您不必執行此開銷活動,而比較日期。從長遠來看它會幫助你。
1.添加一個新列作爲日期數據類型。
ALTER TABLE table_name
ADD new_column DATE;
2.更新新列。
UPDATE table_name
SET new_column = TO_DATE(old_column, 'mm/dd/yyyy hh:mi:ss pm');
3.刪除舊列。
ALTER TABLE table_name
DROP COLUMN old_column;
4.重命名新列老列名。現在
ALTER TABLE table_name
RENAME COLUMN old_name to new_name;
,你可以很容易地比較日期:
SELECT * FROM MYTABLE WHERE mycolumn > to_date('01-08-2015','dd-mm-yyyy');
這也將使用任何常規指數日期列上。
但從性能上來看:
如果你現在不解決這個問題,你會繼續面臨性能問題。由於SUBSTR
的立即修復不會讓您使用任何常規索引,因此您需要創建基於功能的索引的。
列中的格式:'06/16/2015 02:14:18 AM'與您在該列的'to_date()'調用中使用的格式掩碼'dd-mm-yyyy'不匹配。你想'mm/dd/yyyy'而不是 –
你的模式是錯誤的:''dd-mm-yyyy''必須是'mm /'dd/yyyy'' – Jens
爲什麼你把'DATE'作爲'VARCHAR2'存儲?使用適當的數據類型是數據庫設計和性能最重要的部分之一。 –