簡體   English   中英

無效月份-SQL ORA-01843-UNIX

[英]Not A valid Month - SQL ORA-01843 - In unix

我正在使用

TO_CHAR(TO_DATE(tdj_tran_dt,'DD-MON-RRRR'),'DD-MON-RRRR')    

在我的觀點之一中。

基礎數據的格式為DD-MON-YY ,我必須在屏幕上以DD-MON-YYYY的形式顯示它。

最初,我是to_char(tdj_Tran_dt,'DD-MON-YYYY')使用to_char(tdj_Tran_dt,'DD-MON-YYYY') ,但沒有解決問題。 例如,20-OCT-17將變為20-OCT-0017。 我的系統已遷移了數據,因此在插入表時更改數據的形式無濟於事。 因此,為此,我使用了TO_CHAR(TO_DATE(tdj_tran_dt,'DD-MON-RRRR'),'DD-MON-RRRR') ,它似乎在除Unix之外的任何地方都有效。 我有一個proc文件(通過linux運行),該文件調用此視圖並以xls格式寫入數據。 但是在打開游標的過程中,它給出了Oracle錯誤ORA-01843。 將其更改回to_char(tdj_Tran_dt,'DD-MON-YYYY')似乎可行,但又帶回了原來的問題。

我只想知道數據庫中是否有一些設置可以更改以解決此問題。 我在兩個不同的環境中運行相同的東西,並且無效的月份錯誤似乎僅在一個環境中發生。 我已經檢查了nls_parameters,這似乎在兩種環境中都是相同的。

NLS_LANGUAGE    AMERICAN
NLS_TERRITORY   AMERICA
NLS_CURRENCY    $
NLS_ISO_CURRENCY    AMERICA
NLS_NUMERIC_CHARACTERS  .,
NLS_CALENDAR    GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE   AMERICAN
NLS_CHARACTERSET    AL32UTF8
NLS_SORT    BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT    DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT  HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY   $
NLS_NCHAR_CHARACTERSET  AL16UTF16
NLS_COMP    BINARY
NLS_LENGTH_SEMANTICS    BYTE
NLS_NCHAR_CONV_EXCP FALSE

我已經檢查了很多地方,但沒有解決辦法。 如果有人知道如何解決此問題,請提供幫助。

我要tdj_tran_dt猜測tdj_tran_dt實際上是DATE列,因為您提到您使用的是to_char(tdj_tran_dt,'DD-MON-YYYY') ,如果它是字符串,那將失敗。 (這也可以解釋為什么to_date(tdj_tran_dt,'DD-MON-RRRR')在另一個環境中失敗,如果那里的nls_date_format'DD-MON-RRRR'不兼容。)因此,問題在於某些日期是錯誤地輸入為0017年等,即公元1世紀。

如果是這種情況,那么您可能希望通過丟棄本世紀並替代一個更接近的日期來清理那些過時的日期,同時保留更接近今天的日期。

with demo (tdj_tran_dt) as
     ( select date '0017-01-30' from dual union all
       select date '1917-01-30' from dual union all
       select date '1960-01-30' from dual union all
       select date '2017-01-30' from dual )
select tdj_tran_dt
     , to_date(to_char(tdj_tran_dt,'DD-MON-YY'),'DD-MON-RR') as fixed_tran_dt
from   demo
order by tdj_tran_dt;

TDJ_TRAN_DT  FIXED_TRAN_DT
------------ -------------
30-JAN-0017  30-JAN-2017
30-JAN-1917  30-JAN-2017
30-JAN-1960  30-JAN-1960
30-JAN-2017  30-JAN-2017

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM