2017-08-31 41 views
0

我在將varchar(yyyymmdd)轉換爲日期(yyyymmdd)時遇到問題。Oracle sql - 將字符串轉換爲日期

我有一個參數(pdate varchar2,yyyymmdd格式)需要轉換爲日期類型yyyymmdd格式的過程。 到目前爲止,我嘗試過。

vdate date; 

vdate := (to_date(SUBSTR(pdate,1,4)+SUBSTR(pdate,5,2)+SUBSTR(pdate,7,2), 'yyyymmdd')); 

這引發了ORA-01840:輸入值不夠長的日期格式的錯誤。

任何幫助,將不勝感激。

+0

什麼是失敗的一個PDATE的價值最大,因爲建議? ('20170101',1,4)|| SUBSTR('20170101',5,2)|| SUBSTR('20170101',7,2)) ,to_date(SUBSTR('20170101',1,4)|| SUBSTR('20170101',5,2)|| SUBSTR('20170101',7,2),'YYYYMMDD') ,To_date('20170101', 'YYYYDDMM')from dual;' – xQbert

+3

你只需要'to_date(pdate,'yyyymmdd')',假設你的pdate包含了所有的信息。事實上,我很確定你可以擺脫你的程序,只需使用'to_date()'函數! – Boneist

+2

正如已經指出的那樣,你的嘗試失敗的原因是在Oracle中使用「||」進行連接,而不是使用「+」。你在做什麼是你提取的年份,月份和日期,作爲字符串(四位數字,兩位數字,兩位數字)。然後你*添加*他們。在幕後,Oracle將它們轉換爲「NUMBER」並添加它們。然後你應用帶'varchar2'輸入的'to_date()',所以Oracle - 在幕後 - 將添加的結果轉換爲一個四字符的字符串。這不足以成爲一個日期(反正它會是錯誤的!) – mathguy

回答

2

只需使用一個TO_DATE

select to_date(MyDate, 'yyyymmdd') 
from mytable 

測試用:

select to_date('20170831','yyyymmdd') 
from dual 

此外,甲骨文來連接,使用雙管||

select 'Chicken'||'Food' 
from dual 
1

如果PDATE有後其他字符yyyymmdd和yyyymmdd在整個文本的開頭,您可以使用

SELECT TO_DATE(SUBSTR(pdate,1,8), 'yyyymmdd') 
    FROM yourtable; 

SELECT TO_DATE(SUBSTR('20170831 10:30am',1,8), 'yyyymmdd') 
    FROM dual; 

否則,您可以直接使用TO_DATE()通過回答