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

使用DuckDB读取Excel时日期变为数字,如何转为日期格式?

解决DuckDB读取Excel日期显示为整数的问题

问题原因

Excel内部将日期存储为1900年基准的序列号(比如45298对应2024-01-07),而st_read函数(属于spatial扩展)默认将该列识别为整数类型,未自动解析为日期格式。

解决方案

方案1:用EXCEL_DATE函数手动转换整数为日期

DuckDB提供了专门处理Excel日期序列号的EXCEL_DATE函数,可直接将整数转换为标准日期格式:

import duckdb as d

con = duckdb.connect("mydb.db")

con.sql('INSTALL spatial')
con.sql('LOAD spatial')

-- 查询时实时转换日期
result = con.sql("""
SELECT EXCEL_DATE(my_date_col) AS my_date_col 
FROM st_read("my_test_excel.xlsx", layer="Sheet 1")
""")
print(result)

-- 转换后将数据存储到表中
con.sql("""
CREATE TABLE my_date_table AS
SELECT EXCEL_DATE(my_date_col) AS my_date_col 
FROM st_read("my_test_excel.xlsx", layer="Sheet 1")
""")

方案2:使用DuckDB内置read_excel函数(推荐)

DuckDB内置的read_excel函数针对Excel格式做了优化,能自动识别并解析日期列,无需手动转换:

import duckdb as d

con = duckdb.connect("mydb.db")

-- 直接读取并自动解析日期列
result = con.sql("""
SELECT my_date_col 
FROM read_excel('my_test_excel.xlsx', sheet='Sheet 1')
""")
print(result)

-- 将带标准日期格式的数据存储到表中
con.sql("""
CREATE TABLE my_date_table AS
SELECT my_date_col 
FROM read_excel('my_test_excel.xlsx', sheet='Sheet 1')
""")

说明:read_excel是DuckDB官方推荐的Excel读取方式,相比st_read(主要用于空间数据场景)更适合处理常规Excel文件,能自动识别日期、数字、文本等多种数据类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:01:02