我在oracle中使用日期爲41293
,如何以DD/MON/YYYY
格式顯示它?將Excel日期編號更改爲Oracle日期
如果我複製粘貼它在Excel中,並將其更改爲日期格式,它顯示01/19/13
請幫助我。
我在oracle中使用日期爲41293
,如何以DD/MON/YYYY
格式顯示它?將Excel日期編號更改爲Oracle日期
如果我複製粘貼它在Excel中,並將其更改爲日期格式,它顯示01/19/13
請幫助我。
從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
你的價值是自1899年十二月嘗試的第30天數:
select to_char(
to_date('1899-12-30', 'YYYY-MM-DD') + 41293,
'DD/MON/YYYY') from dual
當我執行這個SQL時,答案是19/Jan/2013,但是在給定值的數據是21-JAN-13。客戶數據是錯誤的還是因爲其他因素? –
在你的問題中,你寫了「它顯示01/19/13」,這是我的SQL語句返回的。但是現在你想要1月21日? –
我剛纔檢查了客戶端數據。對不起,但這是我得到的數據..我想,我從客戶那裏得到的數據是錯誤的。謝謝弗蘭克。 –
奇怪!應該是2013年1月20日 – SriniV
他們正在使用此41293作爲他們的數據倉庫中的period_ID。並且該表的其他屬性是日曆日期:21-JAN-13,Day_Name:Monday等。請讓我知道SQL將將41293轉換爲21-JAN-13 –
@realspirituals按照慣例,Excel計算一天之間1900年2月28日和1900年3月1日。因此,從1900年系統中的日期序列號再減去'1'。 – pnuts