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

Google Sheets的DATEVALUE函数在PostgreSQL中的等效实现

在PostgreSQL中实现Google Sheets DATEVALUE函数的等效逻辑

PostgreSQL没有直接对应Google Sheets DATEVALUE的内置函数,但可以通过计算目标日期与Google Sheets日期系统的基准日之间的天数差来实现相同结果。

原理说明

Google Sheets的DATEVALUE函数将日期转换为以1899年12月30日为起点的天数(因Google Sheets存在1900年闰年的历史bug,实际基准并非1900年1月1日)。例如DATEVALUE('2023-18-05')得到45064,本质是计算2023年5月18日与1899年12月30日之间的天数差。

实现方法

在PostgreSQL中,通过以下步骤实现:

  1. 将输入的日期字符串转换为date类型(需匹配实际日期格式);
  2. 计算该日期与基准日'1899-12-30'::date的天数差,转换为整数即可得到与DATEVALUE一致的结果。

示例代码

针对你的例子,输入日期格式为YYYY-DD-MM,对应SQL语句:

SELECT (TO_DATE('2023-18-05', 'YYYY-DD-MM') - '1899-12-30'::date)::INT;

执行后将返回45064,与Google Sheets的输出完全一致。

注意事项

  • 日期格式适配:如果你的日期字符串格式不同(如MM/DD/YYYY),需调整TO_DATE函数的第二个参数,例如TO_DATE('05/18/2023', 'MM/DD/YYYY');
  • 旧日期兼容:若需处理1900年3月1日之前的日期,需额外修正Google Sheets的闰年bug(该bug错误地将1900年视为闰年,导致这一天之前的日期计算差1天),可通过条件判断调整:
    SELECT 
        CASE 
            WHEN target_date < '1900-03-01'::date 
            THEN (target_date - '1899-12-30'::date)::INT + 1 
            ELSE (target_date - '1899-12-30'::date)::INT 
        END AS datevalue
    FROM (SELECT TO_DATE('1900-02-28', 'YYYY-MM-DD') AS target_date) t;
    

内容的提问来源于stack exchange,提问作者Teja Goud Kandula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:57:03