2017-06-17 87 views
1

我的數據庫包含句點(月)和年份 - 我試圖將其轉換爲日期。我不在乎這個月的實際日子,所以我剛剛做到了「1」(本月的第一天)。返回日期的SQL查詢

在我的代碼中,由於一年中的12個月,我必須將「第13」期轉換爲第12期,所以我的解碼器完成了這一部分......最終,我希望它能作爲日期返回。我有一個連接使它看起來像一個日期,但實際上不是一個日期。

我對數據的處理是查詢它並在Excel中將其返回以進一步處理。導入到Excel時,它不會導入爲日期,也不會讓我轉換爲日期格式。

SELECT DIA_PROJECT_DETAIL.FY_DC || '/' || 
    decode(DIA_PROJECT_DETAIL.PER_DC,1,1,2, 2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,12)|| 
    '/01' as "Date" 
FROM AMS.DIA_PROJECT_DETAIL DIA_PROJECT_DETAIL 

必須有一個更容易或更有效的方法來做到這一點!

+0

請提供FY_DC和PER_DC領域的一些樣本數據。 – SandPiper

+1

與你的問題並不真正相關,但如果你的數值上升到13,你確定'period'等於'month';他們不是說4周的時間?和/或從日曆月份的偏移? –

+1

是的,期間是月份。第13個月是爲了捕捉那些在12月份沒有成功但是屬於今年的零星參賽作品 - 團隊提出了第13個月的想法,以允許在下一年的一月份進行這些參賽作品。 - 良好的後續問題。 – davidij

回答

1

沒有更簡單的方法。 DECODE適用於將月份13轉換爲月份12,但您使用它有點複雜。那麼你不應該依賴會話設置,而是直接告訴DBMS你的組裝字符串表示的日期格式。以適當的格式使用TO_DATE

select 
    to_date(fy_dc || to_char(decode(per_dc, 13, 12, per_dc), '00') || '01', 'yyyymmdd') 
    as "Date" 
from ams.dia_project_detail dia_project_detail; 
+0

這工作完美 - 作爲一個新的編碼器,我相信我已經過了複雜的查詢。謝謝您的幫助! – davidij

0

只需使用least()

SELECT (DIA_PROJECT_DETAIL.FY_DC || '/' || 
     LEAST(DIA_PROJECT_DETAIL.PER_DC, 12) || 
     '/01' 
     ) as "Date" 
FROM AMS.DIA_PROJECT_DETAIL DIA_PROJECT_DETAIL;