Oracle SQL 开发人员 - 日期排序不正确(?)

Oracle SQL Developer - Dates sorted incorrectly(?)

我有一个简单的查询,它应该按 von 列的降序排列结果。该列的数据类型为 DATE。它是一个 Oracle 数据库,我在执行查询时使用 Oracle SQL Developer。

这是我正在执行的查询:

select * 
from billinginterval
where id = xxxx or id = yyyy
order by von desc;

这是我针对此查询获得的两个结果:

如有错误请指正,结果不应该是倒序出现的吗?当我执行此查询时

select von 
from billinginterval
order by von desc;

result set 的顺序似乎正确。

如果能帮助理解这一点,我们将不胜感激!

显然,由于数据库中的插入不正确,结果发生了逆转。自

select to_char(von, 'DD-MM-YYYY') from verrechnungszeitraum where id = xxxx;
结果是

returns 01-01-0019。然而,其他行会导致正确的年份。关闭。

如果你有数据:

CREATE TABLE billinginterval (id, von) AS
SELECT 1, DATE '2018-09-01' FROM DUAL;

INSERT INTO billinginterval (id, von)
VALUES (3, TO_DATE('03.01.1919', 'DD.MM.YYYY'));

INSERT INTO billinginterval (id, von)
VALUES (3, TO_DATE('03.01.19', 'DD.MM.YYYY'));

并使用以下方法设置会话:

ALTER SESSION SET NLS_TERRITORY = 'Germany';

然后查询:

select b.*,
       TO_CHAR(von, 'YYYY-MM-DD') AS formatted_von
from billinginterval b
order by von desc;

将输出:

ID VON FORMATTED_VON
1 01.09.18 2018-09-01
2 03.01.19 1919-01-03
3 03.01.19 0019-01-03

id 为 2 的行可能是有效数据,应该按此顺序排列;但是,id 为 3 的行可能无效,有人使用了 INSERT,例如:

INSERT INTO billinginterval (id, von)
VALUES (3, TO_DATE('03.01.19', 'DD.MM.YYYY'))

哪个数据库将年份设为 0019 而不是 2019。您应始终确保您的数据输入符合预期格式,并且在预期为四位数年份时不要提供两位数年份。

db<>fiddle here