SQL: 年份为零时的最小日期

SQL: minimal date when year is zero

我有一个 table 是这样的

|----------|-----------|-----------|
|   year   |   month   |    day    |
|----------|-----------|-----------|
|0         |1          |1          |
|----------|-----------|-----------|
|2100      |5          |6          |
|----------|-----------|-----------|
|5         |7          |8          |
|----------|-----------|-----------|

并且我想要 select 最小日期。到目前为止我已经使用

SELECT  min(TO_DATE(year ||'.'|| month||'.'|| day, 'YYYY.MM.DD'))
FROM    date_table;

哪个应该return

01.01.0000 00:00:00

问题是 TO_DATE 不接受等于零的年份。我怎样才能避免这种情况?

我正在使用 Oracle SQL。

您可以使用一些表达式和 LPAD 函数代替日期,如下所示:

SELECT MIN(LPAD(YEAR,4,'0') || LPAD(MONTH,2,'0') || LPAD(DATE,2,'0')) FROM YOUR_TABLE;

注意:Oracle 不支持将 0000 作为年份。它以 AD 和 BC 格式表示。所以 0001BC 被认为是 0001AD 之前的 1 年,即 0000。所以(0000 年 = 0001BC)

您可以使用 order by 并限制为一行:

select t.*
from t
order by year, month, day
fetch first 1 row only;

这适用于 Oracle 12C+。在旧版本中:

select t.*
from (select t.*
      from t
      order by year, month, day
     ) t
where rownum = 1;