2016-01-29 27 views
0

我正在處理一個字符串列,它包含日期值(我沒有設計它,但我必須使用它)。大約有2500條記錄。格式化日期存儲爲字符串

大部分日期值都是以MM/DD/YYYY格式(前面的'0')輸入的,但也有一些MM/DD/YY格式的流氓記錄,或者其他沒有' 0。源數據的

實施例:

05/20/2012 
05/20/2012 
5/29/2011 
5/6/2015 
5/1/10 

我需要返回值的不同列表,所有格式的相同的方式(MM/DD/YYYY),爲了。

05/01/2010 
05/29/2011 
05/20/2012 
05/06/2015 

鑑於這些值的輸入方式缺乏一致性,我不確定如何實現目標?

+0

如果您要標準化日期,我會推薦ISO標準格式YYYY-MM-DD。 –

+0

您使用的是什麼RDBMS? – algor

+0

在這種情況下'5/1/10'沒有人可以說哪一個值是一年,一個月或一天。我想在這個表中也可能有像10/11/12這樣的日期 - 這是猜測遊戲,你需要一些額外的標準來決定在這種情況下使用哪種格式。還有'10/12/2015'這樣的日期 - 請告訴我哪個值是一個月,哪一天是一天? – krokodilko

回答

2

如果在列日期是在只有2個可能的格式:
X/XX/XX - > MM/DD/YY
XX/XX/XXXX - >毫米/日/年

然後使用簡單的to_date(column_name, 'mm/dd/yy')將字符串轉換爲日期,
然後to_char(value, 'mm/dd/yyyy')將日期轉換回所需的格式。

簡單:

to_char(to_date(column_name, 'mm/dd/yy'), 'mm/dd/yyyy') 

只能使用一個轉換格式mm/dd/yy在to_date函數,因爲Oracle使用和descibed這裏轉換規則(下主題「字符串到日期轉換規則」):
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34924

簡而言之 - 如果格式模型mm/dd/yy不匹配串像10/12/2014,那麼Oracle會自動嘗試另一種格式的模型:mm/dd/yyyy

2

嗯,沒有給出在這個特定情況下使用的數據庫。讓我們假設這是Oracle數據庫,所有的日期與月份開始,期望的結果是字符串,10年5月1日是不是1910年五月1日你可以這樣做:

select to_char(to_date('5/1/10', 'MM/DD/YY'), 'MM/DD/YYYY') from dual; 
select to_char(to_date('05/20/2012', 'MM/DD/YY'),'MM/DD/YYYY') from dual; 
select to_char(to_date('5/29/2011', 'MM/DD/YY'), 'MM/DD/YYYY') from dual; 
select to_char(to_date('5/6/2015', 'MM/DD/YY'),'MM/DD/YYYY') from dual; 

你會得到

05/01/2010 
05/20/2012 
05/29/2011  
05/06/2015