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

多列日期比较:如何获取数据表中每行的最小日期

解决每行多日期字段取最小值的问题

嘿,我明白你遇到的困扰了——想从每行的多个日期字段里揪出最小值,但用LEAST()函数没拿到预期结果。这大概率是不同数据库对日期处理或函数支持的差异导致的,下面分几种常见数据库给你对应的解决方案:

1. MySQL / MariaDB

如果你的日期字段是DATE/DATETIME类型,LEAST()其实是能正常工作的。要是没得到正确结果,可能是字段存成了字符串(比如VARCHAR),这时候得先把字符串转成日期类型再比较:

SELECT 
    Id,
    LEAST(STR_TO_DATE(Date_1, '%Y/%m/%d'), STR_TO_DATE(Date_2, '%Y/%m/%d')) AS Min_date
FROM your_table_name;

要是字段本身就是日期类型,直接用LEAST()就搞定:

SELECT Id, LEAST(Date_1, Date_2) AS Min_date FROM your_table_name;

2. SQL Server

SQL Server没有内置的LEAST()函数,给你两种实现方式:

方式一:用IIF函数(适合两个字段的情况)

SELECT 
    Id,
    IIF(Date_1 < Date_2, Date_1, Date_2) AS Min_date
FROM your_table_name;

方式二:转成行后取最小值(字段多的时候更灵活)

SELECT 
    Id,
    (SELECT MIN(dt) FROM (VALUES (Date_1), (Date_2)) AS Dates(dt)) AS Min_date
FROM your_table_name;

3. PostgreSQL

PostgreSQL支持LEAST()函数,不管字段是日期类型还是格式规范的字符串(它会自动隐式转换),直接用就行:

SELECT Id, LEAST(Date_1, Date_2) AS Min_date FROM your_table_name;

4. Oracle

Oracle同样支持LEAST()函数,直接调用就能得到结果:

SELECT Id, LEAST(Date_1, Date_2) AS Min_date FROM your_table_name;

为啥你原来的语句可能失效?

  • 字段类型问题:如果Date_1和Date_2是字符串类型,且数据库没自动转换日期的逻辑,LEAST()会按字符串字典序比较,容易得出错误结果(比如日期格式是DD/MM/YYYY时,字符串比较就会乱套)。
  • 数据库不支持LEAST():比如SQL Server就没有这个函数,直接用会报错。

用上面对应的方法,就能得到你想要的结果:

Id Min_date
1 2021/03/15
2 2021/08/21
3 2021/07/02

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:27:40