簡體   English   中英

Oracle SQL 開發人員 - 日期排序不正確(?)

[英]Oracle SQL Developer - Dates sorted incorrectly(?)

我有一個簡單的查詢,它應該按von列的降序排列結果。 該列的數據類型為DATE 這是一個 Oracle 數據庫,我在執行查詢時使用 Oracle SQL 開發人員。

這是我正在執行的查詢:

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

這是我為此查詢得到的兩個結果:

查詢結果

如果我錯了,請糾正我,但結果不應該以相反的順序出現嗎? 當我執行這個查詢時

select von 
from billinginterval
order by von desc;

結果集的順序似乎正確。

任何幫助理解這一點將不勝感激!

顯然,由於數據庫中的插入不正確,結果被顛倒了。 自從

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

結果返回 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'));

並使用以下命令設置 session:

ALTER SESSION SET NLS_TERRITORY = 'Germany';

然后查詢:

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

請問output:

ID 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<> 在這里擺弄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM