我有一個簡單的查詢,它應該按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;
該結果集似乎是正確的順序。
任何幫助理解這一點將不勝感激!
uj5u.com熱心網友回復:
如果你有資料:
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 馮 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的行可能是有效資料,應該按此順序排列;但是,具有id3的行可能無效,并且有人使用了INSERT類似的方法:
INSERT INTO billinginterval (id, von)
VALUES (3, TO_DATE('03.01.19', 'DD.MM.YYYY'))
哪個資料庫已經花了一年0019而不是2019。您應該始終確保您的資料輸入與預期格式匹配,并且不要在需要四位數年份時提供兩位數年份。
db<>在這里擺弄
uj5u.com熱心網友回復:
顯然,由于資料庫中的插入不正確,結果被顛倒了。自從
select to_char(von, 'DD-MM-YYYY') from verrechnungszeitraum where id = xxxx;
結果回傳 01-01-0019。然而,其他行會產生適當的年份。關閉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/370310.html
標籤:sql 甲骨文 日期 oracle-sqldeveloper
