You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中如何将Excel转换的浮点型数值(VARCHAR列)转为日期时间

转换Excel浮点日期值为日期时间类型

Excel的日期数值规则:整数部分是从1900年1月1日起的天数,小数部分代表当天的时间占比(0=00:00:00,0.5=12:00:00,1=24:00:00即次日0点)。以下是主流数据库的转换方案:

MySQL/MariaDB

先把VARCHAR列转成浮点型,再用DATE_ADD结合修正后的基准日期(兼容Excel的1900闰年bug)完成转换:

-- 单值转换示例
SELECT DATE_ADD('1899-12-30', INTERVAL 45223.43333 DAY_HOUR) AS datetime_result;

-- 批量转换列数据(假设列名为excel_date_str,表名为your_table)
SELECT 
    DATE_ADD('1899-12-30', INTERVAL CAST(excel_date_str AS DECIMAL(10,5)) DAY_HOUR) AS converted_datetime
FROM your_table;

PostgreSQL

通过TO_TIMESTAMP指定基准日期,再累加浮点值对应的天数间隔:

-- 单值转换示例
SELECT TO_TIMESTAMP('1899-12-30', 'YYYY-MM-DD') + INTERVAL '1 day' * 45223.43333 AS datetime_result;

-- 批量转换列数据
SELECT 
    TO_TIMESTAMP('1899-12-30', 'YYYY-MM-DD') + INTERVAL '1 day' * CAST(excel_date_str AS NUMERIC) AS converted_datetime
FROM your_table;

SQL Server

将浮点值转换为总秒数,再用DATEADD累加至基准日期:

-- 单值转换示例
SELECT DATEADD(SECOND, 45223.43333 * 86400, '1899-12-30') AS datetime_result;

-- 批量转换列数据
SELECT 
    DATEADD(SECOND, CAST(excel_date_str AS FLOAT) * 86400, '1899-12-30') AS converted_datetime
FROM your_table;

注:86400为一天的总秒数,此方式能精准计算出包含时分秒的完整日期时间

结果验证

以示例值45223.43333为例,转换后对应日期时间为2023-09-08 10:24:00左右,可与Excel原日期对比确认准确性。

内容的提问来源于stack exchange,提问作者Sarah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:33:19