【问题标题】:Oracle SQL Developer - Dates sorted incorrectly(?)Oracle SQL Developer - 日期排序不正确(?)
【发布时间】:2022-01-05 14:13:19
【问题描述】:

我有一个简单的查询,它应该按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 DUMP(von), TO_CHAR(von, 'YYYY-MM-DD') FROM billinginterval会得到什么?
  • 我收到 DUMP(VON)=: Typ=12 Len=7: 100,119,1,1,1,1,1 TO_CHAR(von, 'YYYY-MM-DD'): 0019 -01-01 这可能是某人插入的错误。

标签: sql oracle date oracle-sqldeveloper


【解决方案1】:

如果你有数据:

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小提琴here

【讨论】:

    【解决方案2】:

    显然,由于数据库中的插入不正确,结果被颠倒了。自从

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

    因此返回 01-01-0019。然而,其他行会产生适当的年份。结束。

    【讨论】:

    • 这个“答案”有什么意义? MT0 正确诊断了问题,并发布了包含完整详细信息的答案。您对此的正确反应应该是将他的答案标记为“正确答案”,而不是发布您自己的单独答案。请删除您的答案,并相应地标记正确的答案。
    • @mathguy 我提示了 cmets 中的 OP,让他们提供更多详细信息并自己诊断问题。当我输入我的答案并让小提琴工作时,他们发布了这个简短的答案,然后在我发布了我的完整答案后不久,minimal reproducible example 以及在INSERTs 中寻找哪些问题的详细信息;所以他们的答案没有出现在我之后。
    • @MT0 - 好的,这是有道理的。不过,在这一点上,我仍然鼓励 OP 关闭他自己的答案并将您的答案标记为正确答案。
    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 2021-03-05
    • 2015-05-02
    相关资源
    最近更新 更多