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
我有一个简单的查询,它应该按 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