2015-10-14 18 views
2

我已經創建了一個圖,其中列命令中的一個是:ORA-01843:不是一個有效一個月的數據類型轉換

TO_CHAR(TO_DATE(sysdate ||' '||TIMING.TIME,'dd-MON-RRRR HH:MIAM'),'dd-MON-RRRR HH:MIAM') as time 

TIMING.TIME的值是這樣的:作爲09:30AM VARCHAR2

當我運行查詢:select TO_DATE(time,'DD-MON-RRRR HH:MIAM')from view

我得到的錯誤

ORA-01843:不是VAL id month

NLS Language是美國的。 。

回答

3

TO_DATE(SYSDATE

這是不對的

切勿DATE數據類型的應用TO_DATE它迫使甲骨文:

  • 先將其轉換一個字符串
  • 然後轉換我t返回日期

基於區域設置特定的NLS設置。您需要TO_DATE將文字轉換爲日期。對於日期算術,保持原樣。

如果你想配置當前日期時間部分,則: 1.首先轉換成日期字符串 2.然後串聯的時間部分字符串 3.最後申請TO_DATE

例如,

SQL> alter session set nls_date_format='DD-MM-YYYY HH:MI:SS AM'; 

Session altered. 

SQL> SELECT to_date(TO_CHAR(sysdate, 'mm/dd/yyyy') 
    2 ||' ' 
    3 ||'09:30AM', 'mm/dd/yyyy hh:miAM') TIME 
    4 FROM dual; 

TIME 
---------------------- 
14-10-2015 09:30:00 AM 

記住,

  • TO_DATE用於將轉換爲將字符串轉換爲日期。
  • TO_CHAR用於display希望的字符串格式的日期。

爲你修改後的查詢:

to_date(TO_CHAR(sysdate, 'mm/dd/yyyy') ||' ' ||TIMING.TIME, 'mm/dd/yyyy hh:miAM') 
AS "TIME" 
1

sysdate店時間,倒不如把它轉換連接前爲char

TO_CHAR(sysdate,'dd-MON-RRRR')||' '||TIMING.TIME 
相關問題