在Oracle SQL中将特殊5位数字转换为标准日期
1900年基准天数转dd/mm/yyyy日期的解决方法
核心逻辑是:这类数字是以1900年1月1日为起始日的偏移天数,只需以该日期为基础加上对应天数,再格式化输出即可。以下是主流数据库的实现代码:
Oracle
直接基于起始日期做天数加法,再格式化:
-- 单值转换示例 SELECT TO_CHAR(DATE '1900-01-01' + 42946, 'DD/MM/YYYY') AS formatted_date FROM dual; -- 列转换示例 SELECT TO_CHAR(DATE '1900-01-01' + your_date_column, 'DD/MM/YYYY') AS formatted_date FROM your_table;
SQL Server
使用DATEADD偏移天数,再通过CONVERT或FORMAT格式化:
-- 用FORMAT示例 SELECT FORMAT(DATEADD(day, 42946, '1900-01-01'), 'dd/MM/yyyy') AS formatted_date; -- 用CONVERT示例(性能更优) SELECT CONVERT(varchar, DATEADD(day, 42946, '1900-01-01'), 103) AS formatted_date; -- 列转换示例 SELECT CONVERT(varchar, DATEADD(day, your_date_column, '1900-01-01'), 103) AS formatted_date FROM your_table;
MySQL
通过DATE_ADD或直接加INTERVAL偏移天数,再用DATE_FORMAT格式化:
-- 单值转换示例 SELECT DATE_FORMAT(DATE_ADD('1900-01-01', INTERVAL 42946 DAY), '%d/%m/%Y') AS formatted_date; -- 列转换示例 SELECT DATE_FORMAT('1900-01-01' + INTERVAL your_date_column DAY, '%d/%m/%Y') AS formatted_date FROM your_table;
内容的提问来源于stack exchange,提问作者Oscar
相关产品推荐
相关产品推荐

