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;
我有一个 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;