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

