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



我有一个这样的表格

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

我想选择最小日期。到目前为止,我已经使用

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

哪个应该返回

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 被认为是 1 年之前的 0001AD 即 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;

相关内容

  • 没有找到相关文章

最新更新