왜 날짜열에서 to char 함수를 사용할 때order by 정렬이 올바르지 않습니까?

질문:

데이터베이스 모델의 마지막 통계 정보를 얻으려고 시도하고 있습니다.이 질의를 사용하는 중:
COL last_analyzed FOR A30;
col stale_stats for a11;
col table_name for a40;
col owner for a30;
SET LINESIZE 2000;
select owner,NVL(TO_CHAR(last_analyzed, 'DD/MM/YYYY'), 'NO STATS') last_analyzed,count(*) last_analyzed_count
from dba_tab_statistics
where owner = 'EXAMPLE'
group by owner,TO_CHAR(last_analyzed, 'DD/MM/YYYY')
order by 2 asc
/
하지만 내 유형은:
OWNER                          LAST_ANALYZED                  LAST_ANALYZED_COUNT
------------------------------ ------------------------------ -------------------
EXAMPLE                         07/05/2021                                    1
EXAMPLE                         11/06/2021                                    32
EXAMPLE                         26/04/2021                                    169
EXAMPLE                         27/04/2021                                    1
EXAMPLE                         NO STATS                                      1
여기서 우리는 06월이 05월 이후에 있는 것을 볼 수 있다.

답안

날짜는 문자열로 정렬되어 있기 때문에 정렬이 100% 정확합니다.
ISO 표준 형식을 사용하는 것이 좋습니다.
select owner,
       coalesce(TO_CHAR(last_analyzed, 'YYYY-MM-DD'), 'NO STATS') last_analyzed,count(*) last_analyzed_count
from dba_tab_statistics
where owner = 'EXAMPLE'
group by owner, TO_CHAR(last_analyzed, 'YYYY-MM-DD')
order by 2 asc;
그러나 사용자 정의 날짜 형식을 계속 사용하려면 ORDER BY:
order by owner, min(dba_tab_statistics.last_analyzed)