sql:年为零的最小日期

xeufq47z  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(432)

我有一张这样的table

|----------|-----------|-----------|
|   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 不接受等于零的年份。我怎样才能避免这种情况?
我正在使用oraclesql。

pbgvytdp

pbgvytdp1#

你可以用一些表达式和 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年=公元前0001年)

nxowjjhe

nxowjjhe2#

你可以用 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;

相关问题