2013-10-16 47 views

回答

3

從Oracle forum報價:

你需要一個工具來做到這一點,因爲格式是告訴甲骨文您對在電子表格中的日期類型是什麼類型的格式。儘管您可能沒有選擇在Excel中格式化日期,但它會在預覽器中顯示爲日期。使用此格式作爲指南進入數據類型面板。因此,如果在預覽器19-jan-2006中有一個看起來像這樣的日期,那麼如果您選擇插入該列,則數據類型面板的格式將爲DD-MON-YYYY,

選項1:

嘗試使用以下功能

FUNCTION FROMEXCELDATETIME (ACELLVALUE IN VARCHAR2) 
    RETURN TIMESTAMP 
IS 
    EXCEL_BASE_DATE_TIME CONSTANT TIMESTAMP 
      := TO_TIMESTAMP ('12/31/1899', 
          'mm/dd/yyyy') ; 

    VAL CONSTANT NUMBER 
      := TO_NUMBER (NULLIF (TRIM (ACELLVALUE), 
           '0')) ; 
BEGIN 
    RETURN EXCEL_BASE_DATE_TIME 
      + NUMTODSINTERVAL (VAL 
          - CASE 
           WHEN VAL >= 60 
           THEN 
            1 
           ELSE 
            0 
          END, 
          'DAY'); 
END; 

FUNCTION TOEXCELDATETIME (ATIMESTAMP IN TIMESTAMP) 
    RETURN VARCHAR2 
IS 
    EXCEL_BASE_DATE_TIME CONSTANT TIMESTAMP 
      := TO_TIMESTAMP ('12/31/1899', 
          'mm/dd/yyyy') ; 

    DIF CONSTANT INTERVAL DAY (9) TO SECOND (9) 
      := ATIMESTAMP 
       - EXCEL_BASE_DATE_TIME ; 
    DAYS CONSTANT INTEGER := EXTRACT (DAY FROM DIF); 
BEGIN 
    RETURN CASE 
       WHEN DIF IS NULL 
       THEN 
        '' 
       ELSE 
        TO_CHAR ( DAYS 
         + CASE 
           WHEN DAYS >= 60 
           THEN 
            1 
           ELSE 
            0 
          END 
         + ROUND ((EXTRACT (HOUR FROM DIF) 
            + (EXTRACT (MINUTE FROM DIF) 
            + EXTRACT (SECOND FROM DIF) 
            /60) 
            /60) 
           /24, 
           4)) 
      END; 
END; 

選項2:

excel函數將爲=TEXT(B2,"MM/DD/YY"),用於轉換B2中存儲的Excel日期值。然後嘗試使用測試字符甲骨文

如果考慮到1900年開始日期1月1日,

SELECT 
     TO_CHAR (TO_DATE ('1900-01-01', 
         'YYYY-MM-DD') 
       + 41293, 
       'DD/MON/YYYY') 
FROM 
     DUAL 
+0

奇怪!應該是2013年1月20日 – SriniV

+0

他們正在使用此41293作爲他們的數據倉庫中的period_ID。並且該表的其他屬性是日曆日期:21-JAN-13,Day_Name:Monday等。請讓我知道SQL將將41293轉換爲21-JAN-13 –

+0

@realspirituals按照慣例,Excel計算一天之間1900年2月28日和1900年3月1日。因此,從1900年系統中的日期序列號再減去'1'。 – pnuts

6

你的價值是自1899年十二月嘗試的第30天數:

select to_char(
    to_date('1899-12-30', 'YYYY-MM-DD') + 41293, 
    'DD/MON/YYYY') from dual 
+0

當我執行這個SQL時,答案是19/Jan/2013,但是在給定值的數據是21-JAN-13。客戶數據是錯誤的還是因爲其他因素? –

+0

在你的問題中,你寫了「它顯示01/19/13」,這是我的SQL語句返回的。但是現在你想要1月21日? –

+0

我剛纔檢查了客戶端數據。對不起,但這是我得到的數據..我想,我從客戶那裏得到的數據是錯誤的。謝謝弗蘭克。 –

相關問題