2015-06-12 81 views
0

不一致的日期格式我卡上的日期格式問題,並希望有人能幫助我!Postgres的SQL - 選擇字符型字段

我們的數據庫有其格式化爲一個字符域由我們的編程團隊,因爲不同的進口來源/格式日期字段。

我的理想目標是創建一個視圖,該視圖以日期結束,然後我將在報表工具(dbxtra)中用於樞軸和報表的每日/每月分組。

實施例的數據:

「2015年5月30日」

「2015年3月6日上午12時」

我曾嘗試:

  • 轉換爲日期::日期

  • SUBSTR取前10個字符

有什麼建議?

+0

我也試過:trim(substr(comp_date,1,10)的''')作爲comp_date2,現在只給我日期部分而沒有空格......雖然仍然不好 – Damo

+0

使用'to_timestamp'。由於列內的格式各不相同,因此您可能需要一個嘗試不同格式的「CASE」語句。這將是緩慢和醜陋的。我建議你的編程團隊堅決地打擊頭部。 –

+0

一旦你清理了這個爛攤子,把這個欄目改爲'timestamp' –

回答

0

我會爲此編寫一個存儲過程,您可以在sql查詢中調用該過程。像這樣的(僞代碼)的東西:

CREATE OR REPLACE FUNCTION convertMessedUpStringsToDate(i_val1 varchar) RETURNS timestamp 
declare 
    retval timestamp; 
    formatArray varchar[]; 
begin 
    -- build array with possible formats, most used in front 
    formatArray[0] = 'YYYY-MM-DD'; 
    formatArray[1] = 'DD/MM/YYYY HH12:MI AM'; 

    for i in 0 .. formatArray.count loop 
    begin 
     retval = to_timestamp(i_val, formatArray[i]); 
    exception 
     -- catch any exception and try the next format 
    end; 
    end loop; 

    return retval; 
end; 

另一種選擇是使用正則表達式來解析您的輸入,並找到匹配模式的方式。無論如何,我希望你沒有太多不同的模式。