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
相关产品推荐
相关产品推荐

