Development Tip

Oracle의 기본 날짜 형식은 YYYY-MM-DD입니다. 이유는 무엇입니까?

yourdevel 2020. 11. 9. 21:16
반응형

Oracle의 기본 날짜 형식은 YYYY-MM-DD입니다. 이유는 무엇입니까?


Oracle의 기본 날짜 형식은 YYYY-MM-DD입니다. 즉, 내가 할 경우 :

 select some_date from some_table

... 나는 데이트의 시간 부분을 잃어버린다 .

예, 다음과 같이 "수정"할 수 있습니다.

 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

그러나 진지하게, 위의 기본값이 아닌 이유 는 무엇입니까? 특히 두 가지 기본 시간 추적 데이터 유형 (DATE 및 TIMESTAMP)이 둘 다 (적어도) 1 초까지의 정확도를 포함하는 시간 구성 요소를 갖는 DBMS에서 .


이 쿼리를 사용하여 데이터웨어 하우스에 대한 입력 파일을 생성하는 경우 데이터 형식을 적절하게 지정해야합니다. 기본적으로이 경우 날짜 (시간 구성 요소가 있음)를 문자열로 변환합니다. 문자열을 명시 적으로 형식화하거나 기본값을 설정하려면 nls_date_format을 변경해야합니다. 쿼리에서 다음을 수행 할 수 있습니다.

select to_char(some_date, 'yyyy-mm-dd hh24:mi:ss') my_date
  from some_table;

Oracle 데이터베이스와 Oracle SQL Developer를 혼동하지 않으시겠습니까?

데이터베이스 자체에는 날짜 형식이 없으며 날짜는 원시 형식으로 데이터베이스에서 나옵니다. 그것을 렌더링하는 것은 클라이언트 소프트웨어에 달려 있으며 SQL Developer YYYY-MM-DD를 기본 형식으로 사용합니다.

편집 : 아래에 설명 된대로 SQL Developer는 DATE 값을 올바르게 표시하도록 재구성 할 수 있으며 잘못된 기본값 만 있습니다.


YYYY-MM-DD 형식은 날짜 (및 시간) 정보 교환을위한 표준 ISO8601일부입니다 .

이와 같은 ISO 표준 을 채택하는 것은 Oracle에게 매우 용감 하지만 동시에 그들이 끝까지 가지 않은 것이 이상 합니다 .

일반적으로 사람들에서 아무것도 다른 저항하지만, 많은가 좋은 국제 이유로 그것을 위해가.

나는 내가 혁명적 인 말을하고 있다는 것을 알고 있지만, 우리는 모두 ISO 표준을 받아 들여야 합니다 .


Oracle의 가장 큰 PITA는 기본 날짜 형식이 없다는 것입니다!

Oracle 설치에서 로케일과 설치 옵션의 조합은 날짜 출력 형식으로 YYYY-MM-DD를 선택했습니다. 다른 설치에서 "DD / MM / YYYY"또는 "YYYY / DD / MM"을 선택할 수 있습니다.

SQL을 다른 Oracle 사이트로 이식하려면 항상TO_CHAR(datecol,'YYYY-MM-DD') SQL의 각 날짜 열 주위에 또는 유사한 기능을 감싸 거나 연결 후 즉시 기본 형식을 설정하는 것이 좋습니다.

ALTER SESSION 
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'; 

또는 유사합니다.


날짜 형식, 통화 형식, 옵티 마이저 모드 등 무엇이든간에 특정 값인 IMHO로 설정된 기본값에 의존하는 것은 결코 현명하지 않습니다. 항상 서버, 클라이언트 또는 응용 프로그램에서 필요한 날짜 형식의 값을 설정해야합니다.

특히, 표시 목적으로 날짜 또는 숫자 데이터 유형을 변환 할 때 기본값에 의존하지 마십시오. 데이터베이스를 한 번만 변경하면 애플리케이션이 손상 될 수 있습니다. 항상 명시 적 변환 형식을 사용하십시오. 수년 동안 저는 기본 날짜 표시 형식이 MM / DD / RR 인 Oracle 시스템에서 작업했습니다. 이로 인해 미치게 만들었지 만 적어도 항상 명시적인 변환을 사용해야했습니다.


대부분의 IDE에서는 날짜, 통화, 소수점 구분 기호 등과 같은 데이터 종류에 대한 기본 마스크를 구성 할 수 있습니다.

Oracle SQL Developer를 사용하는 경우 :

도구> 환경 설정> 데이터베이스> NLS

날짜 형식 : YYYY-MM-DD HH24 : MI : SS


SQL 표준에 따른 DATE 값은 YYYY-MM-DD입니다. 따라서 Oracle이 시간 정보를 저장하더라도 SQL 표준과 호환되는 방식으로 값을 표시하고있는 것 같습니다. 표준에는 날짜 및 시간 정보를 포함하는 TIMESTAMP 데이터 유형이 있습니다.


이것은 실제로 Oracle 문제가 아니라 클라이언트 측의 "문제"입니다.

이러한 방식으로 날짜를 형식화하고 표시하는 것은 클라이언트 응용 프로그램입니다.

귀하의 경우이 형식을 지정하는 것은 SQL * Plus입니다.
다른 SQL 클라이언트에는 다른 기본값이 있습니다.


나는 오라클 사용자는 아니지만 (최근 어쨌든),하지만 ...

대부분의 데이터베이스 (정확한 언어)에서 날짜에는 시간이 포함되지 않습니다. 날짜가 있다고해서 해당 날짜에 특정 초를 표시한다는 의미는 아닙니다. 일반적으로 시간과 날짜를 원하는 경우이를 타임 스탬프라고합니다.


Oracle에는 날짜 및 타임 스탬프 데이터 유형이 모두 있습니다.

Oracle 문서 에 따르면 날짜와 타임 스탬프간에 데이터 크기에 차이가 있으므로 날짜 전용 필드를 사용하려는 경우 날짜 형식을 표시하는 것이 좋습니다. 또한 "분수 초 또는 시간대가 없습니다." -따라서 타임 스탬프 정보가 필요한 경우 최선의 선택이 아닙니다.

날짜 필드는 Oracle SQL Developer의 시간 구성 요소를 표시하도록 쉽게 형식을 지정할 수 있습니다 . PL / SQL Developer에서 실행 된 날짜 쿼리는 시간을 표시하지만 Oracle SQL Developer에는 표시되지 않습니다 . 그러나 분수 초 또는 시간대는 표시되지 않습니다.이를 위해서는 Timestamp 데이터 유형이 필요합니다.


이유 : 타임 스탬프가있는 데이터 열을 보면 _MOST_IMPORTANT_ 비트 정보가 연도입니다. 데이터가 10 년 동안 db에 있었다면 아는 것이 중요합니다. 그래서 해가 먼저입니다.

월이 다음 날, 일,시, 분이 올 것입니다. 객관적으로 시간 데이터가 표시되는 가장 논리적 인 순서입니다.

또한 기본적으로 데이터를 표시하려는 경우 데이터의 가장 중요한 부분 만 표시해야하므로 기본적으로 YMD 만 표시해야합니다. 다른 모든 것을 표시 할 수 있지만 기본적으로 SQL 보고서를 복잡하게 만들지는 않습니다.

YMD는 순차적이므로 표시하면 날짜순 정렬이 논리적입니다. 컴퓨터는 순차에 능숙하며 논리적으로 보입니다.

드디어. MDY를 원하는 편견은 편견입니다. 미국의 모든 사람이이 형식을 사용하는 것은 아닙니다. 따라서 가장 논리적 인 형식을 사용하고 다른 사람들이 기본적으로 논리적 인 것으로 결정할 때 분노하지 마십시오.

(저는 미국에서 태어나 오라클을 대표하지 않습니다.하지만 스스로 생각할 수 있습니다.)


기본 날짜가 TIME 부분을 표시하지 않는 이유라는 질문에 대답하기 위해 내가 찾은 유일한 대답은

Oracle 팀은 LAZY 개발자 또는 책임자로 구성됩니다. :-)

왜 ?

DATE, TIME 및 DATETIME 데이터 유형이 SQL에 존재하고 Oracle이 아직 구현하지 않았기 때문에 !!!

Oracle에게는 부끄러운 일입니다.

그러나 문제에 대한 정답은 FIX 기본 형식을 정의하는 것이 아니라 표시된 DATE, TIME 또는 DATETIME 값 (기본적으로)이 항상 모든 중요한 숫자를 포함하도록 유효 숫자 만 표시하는 SIGNIFICANT 기본 형식을 정의하는 것입니다.

예:

2015-10-14          will be displayed as 2015-10-14 (or default DATE format)
2018-10-25 12:20:00 will be displayed as 2018-10-25 12:20
1994-04-16 16       will be displayed as 1994-04-16 16

원리는 간단합니다.

DATE의 일부인 모든 숫자는 항상 float 숫자의 INTEGER 부분으로 표시됩니다. TIME 부분의 경우 DECIMAL 부분과 같이 중요한 부분 만 float 숫자로 표시됩니다. 당연히 TIME 유형 (HH : MM : SS 만 해당)의 경우 DATE 부분이 표시되지 않습니다.

참고 URL : https://stackoverflow.com/questions/1837974/oracles-default-date-format-is-yyyy-mm-dd-why

반응형