【PostgreSQL】时间取最大值,转换为init,如果为空则为0 先说总结EXTRACT(EPOCH FROM ...)时间转数字::BIGINT转整数COALESCE(..., 0)空值变 0SELECTCOALESCE(EXTRACT(EPOCHFROMMAX(updated_at))::BIGINT,0)ASmax_updated_atFROMxxxxx如果不想转成数字时间戳只想保留原始时间格式同时空表返回一个安全的默认时间这里填SELECTCOALESCE(MAX(updated_at),1970-01-01 00:00:00::timestamp)ASmax_updated_atFROMxxxxx三个核心部分的作用1.MAX(updated_at)作用取最大的那个时间它不是你问的三个函数之一但它是基础取最大更新时间2.EXTRACT(EPOCH FROM ...)作用把「时间类型」转换成「Unix 时间戳秒数」EXTRACT提取函数从时间里抠出你想要的部分EPOCH指Unix 时间戳从 1970-01-01 到现在的秒数FROM固定语法代表「从哪个时间字段里提取」例子时间2025-01-01 00:00:00 EXTRACT(EPOCH FROM 时间) → 1735689600 秒一句话总结EXTRACT(EPOCH FROM 时间) 把时间变成纯数字秒数3.::BIGINT作用把小数转成整数EXTRACT出来的是浮点数例如1735689600.123::BIGINT强转成整数方便程序使用4.COALESCE(值, 0)作用空值安全 → 如果是 NULL就返回 0如果三个表都没数据MAX(updated_at)会变成NULLCOALESCE(NULL, 0)→ 自动返回0保证程序永远不会收到 NULL避免报错最终三合一完整作用COALESCE(EXTRACT(EPOCHFROMMAX(updated_at))::BIGINT,0)按顺序执行逻辑取最大时间→MAX(updated_at)转成时间戳秒数→EXTRACT(EPOCH FROM ...)转成整数→::BIGINT空值保护→ 是 NULL 就返回 0 →COALESCE(..., 0)最简记忆口诀EXTRACT(EPOCH FROM)时间 → 数字秒数::BIGINT小数 → 整数COALESCE(…, 0)空 → 0不报错