sql:年为零的最小日期

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

我有一张这样的table

  1. |----------|-----------|-----------|
  2. | year | month | day |
  3. |----------|-----------|-----------|
  4. |0 |1 |1 |
  5. |----------|-----------|-----------|
  6. |2100 |5 |6 |
  7. |----------|-----------|-----------|
  8. |5 |7 |8 |
  9. |----------|-----------|-----------|

我想选择最短的日期。到目前为止我已经用了

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

它应该会回来

  1. 01.01.0000 00:00:00

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

pbgvytdp

pbgvytdp1#

你可以用一些表达式和 LPAD 功能如下:

  1. 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 限制为一行:

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

这适用于oracle 12c+。在旧版本中:

  1. select t.*
  2. from (select t.*
  3. from t
  4. order by year, month, day
  5. ) t
  6. where rownum = 1;

相关问题