2012-12-19 108 views
0

以下更新日期欄是我的Oracle更新查詢that`s扔error--甲骨文:在一個表中

更新表設置COL1 = TO_DATE(:dateFill, 'MM/DD/YYYY HH24:MI:SS' )其中Fil1 =:ID;

dateFill = 01/05/2012, ID = 15

此語句是在程序執行時,

錯誤 - :ORA-01722:無效號碼(日期字段)

燦有人告訴我爲什麼'從雙選'選擇To_date('01/05/2012 00:00:00','mm/dd/yyyy hh24:mi:ss')';給我結果就像'05 -JAN-2012 00:00:00'。

請給我一些答案。

+0

什麼是爲「FIL1」列的表的數據類型是不是真的任何機會一個VARCHAR2?和你定義的數據類型:ID是我認爲的數字? – DazzaL

+0

這裏沒有問題,'Fil1'或'ID'在這裏,日期值的問題.Fil1是varchar2,'ID'是varchar2的變量。 – user1495475

+0

你說它運行在一個過程中,告訴我們你是如何綁定這些值的(dbms_sql/execute immediate),因爲「:id」只在我們說動態sql時纔有效。你怎麼知道錯誤是在日期部分? – DazzaL

回答

1

如果dateFill = 01/05/2012,爲什麼要指定包含「hh24:mi:ss」的日期格式?

+0

這樣做有什麼問題?oracle會接受24小時格式。 – user1495475

+0

然後你必須提供一個包含hh24:mi:ss組件的字符串。您格式圖片告訴to_date函數如何解釋您傳遞給它的字符串。您告訴它將某些字符解釋爲小時/分鐘/秒,但您不提供dateFill中的那些字符 –

+0

我不需要提供它,默認情況下'00:00:00'將顯示正確嗎? – user1495475

1

當嘗試將字符串轉換爲數字並且該字符串無法轉換爲有效數字時,會發生ORA-01722錯誤。有效的數字包含數字'0'到'9',可能有一個小數點,字符串開頭或結尾的符號(+或 - ),或'E'或'e'(如果它是浮動的科學記數法中的點數)。

0

TO_DATE總是以 '性格',即

to_date(char[,'format'[,nls_lang]) 

你的變量'dateFill'是Number數據類型的工作。 Castconvert此'dateFill' 字段到varchar和東西將工作。

0

有人能告訴我爲什麼是 '選擇TO_DATE('01/05/2012 00:00:00', 'MM/DD/YYYY HH24:MI:SS')從雙;」給我結果像 '05 -JAN-2012 00:00:00'。???

的日期顯示是怎麼到你的客戶端/ NLS日期格式設置:

SQL> select To_date('01/05/2012 00:00:00','mm/dd/yyyy hh24:mi:ss') from dual; 

TO_DATE('01/05/20120 
-------------------- 
05-jan-2012 00:00:00 

SQL> alter session set nls_date_format='mm/dd/yyyy hh24:mi:ss'; 

Session altered. 

SQL> select To_date('01/05/2012 00:00:00','mm/dd/yyyy hh24:mi:ss') from dual; 

TO_DATE('01/05/2012 
------------------- 
01/05/2012 00:00:00 

SQL>