我在oracle中的日期为41293
,如何以DD/MON/YYYY
格式显示?
如果我将其复制粘贴在Excel中并将其更改为日期格式,则会显示01/19/13
请帮帮我。
答案 0 :(得分:6)
你拥有的价值是自1899年12月30日以来的天数。试试:
select to_char(
to_date('1899-12-30', 'YYYY-MM-DD') + 41293,
'DD/MON/YYYY') from dual
答案 1 :(得分:4)
引用Oracle forum:
您需要一个工具来执行此操作,因为格式是告诉oracle您在电子表格中的日期类型上具有哪种格式。虽然您可能没有选择在Excel中格式化日期,但它会在预览器中显示为日期。使用此格式作为指南,进入数据类型面板。
所以,如果你在预览器中看到这样的日期,19-jan-2006,那么如果你选择插入那个列,你的数据类型面板的格式将是DD-MON-YYYY,< / p>
选项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日期值。然后尝试使用Oracle中的测试字符
如果考虑将1900年1月1日作为开始日期,
SELECT
TO_CHAR ( TO_DATE ( '1900-01-01',
'YYYY-MM-DD' )
+ 41293,
'DD/MON/YYYY' )
FROM
DUAL
答案 2 :(得分:0)
Excel将日期存储为序列号,以便可以在计算中使用它们。 1900年1月1日是序列号1,而2008年1月1日是序列号39448,因为它是1900年1月1日之后的39,447天。
Excel具有 bug 功能,它认为1900 to be a leap year并且日期60
是1900-02-29
,但是这一天不存在,因此需要对此进行更正错误的一天。
它也指出:
Microsoft Excel可以正确处理所有其他leap年,包括不是leap年的世纪年(例如2100)。仅对1900年的处理不正确。
因此,只需要进行一次更正。
所以:
1900-03-01
之前,您可以使用DATE '1899-12-31' + value
。1900-03-01
或之后,您可以使用DATE '1899-12-30' + value
。可以放在CASE
语句中的内容:
SELECT CASE
WHEN value >= 1 AND value < 60
THEN DATE '1899-12-31' + value
WHEN value >= 60 AND value < 61
THEN NULL
WHEN value >= 61
THEN DATE '1899-12-30' + value
END AS converted_date
FROM your_table