我有一个这样的表格
|----------|-----------|-----------|
| 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;