programing

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

javajsp 2023. 4. 4. 20:58

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

Oracle의 기본 날짜 형식은 YYY-MM-DD입니다.그 말은 내가 한다면:

 select some_date from some_table

데이트에서 시간을 뺏겨요

네, 다음과 같은 방법으로 문제를 해결할 수 있습니다.

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

그런데 왜 위의 내용이 기본값이 아닐까요?특히 DBMS에서는 두 가지 주요 시간 추적 데이터 유형(DATE 및 TIMESTAMP) 모두 최소 1초까지의 정확도를 포함하는 시간 구성요소를 가집니다.

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

데이터베이스 자체에는 날짜 형식이 없으며, 날짜는 원시 형식으로 데이터베이스에서 나옵니다.렌더링하는 것은 클라이언트소프트웨어에 따라 다르며 SQL Developer는 기본 포맷으로 YYY-MM-DD를 사용합니다.이것은 거의 쓸모가 없습니다.

edit: 아래 설명과 같이 SQL Developer는 DATE 값을 올바르게 표시하도록 재구성할 수 있습니다.기본값이 올바르지 않을 뿐입니다.

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

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

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

Oracle이 이와 같은 ISO 표준을 채택한 것은 매우 용감한 일이지만, 이와 동시에 이러한 표준이 제대로 채택되지 않은 은 이상합니다.

일반적으로 사람들은 무엇이든지 다른 것에 저항하지만, 거기에는 많은 좋은 국제적 이유가 있다.

혁명적인 말을 하고 있는 것은 알지만, 모두 ISO 표준을 채택해야 합니다. 번에 조금씩이라도.

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

Oracle 설치에서는 Locales와 설치 옵션의 조합이 선택되었습니다(매우 현명한 선택입니다).날짜 출력 형식으로서의 YYY-MM-DD.다른 설치에서는 "DD/MM/YYY" 또는 "YYY/DD/MM"을 선택할 수 있습니다.

SQL을 다른 Oracle 사이트로 이식할 경우 항상 다음을 랩하는 것이 좋습니다.TO_CHAR(datecol,'YYYY-MM-DD')에 SQL의 각 에 동일한 합니다.

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

또는 이와 유사합니다.

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

특히, 표시 목적으로 날짜 또는 숫자 데이터 유형을 변환할 때 기본값에 의존하지 마십시오. 데이터베이스를 한 번만 변경하면 응용 프로그램이 중단될 수 있습니다.항상 명시적 변환 형식을 사용하십시오.몇 년 동안 Oracle 시스템에서 일했는데, 기본 날짜 표시 형식은 MM/DD/RR로 되어 있어서 미치긴 했지만 적어도 항상 명시적 변환을 사용해야만 했습니다.

대부분의 IDE는 날짜, 통화, 소수 구분 기호 등의 데이터에 대해 기본 마스크를 구성할 수 있습니다.

에서 Oracle SQL Developer를 사용하는 경우:

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

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

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

이것은 클라이언트측의 「문제」이며, 실제로는 Oracle의 문제가 아닙니다.

이렇게 날짜를 포맷하고 표시하는 클라이언트 응용 프로그램입니다.

SQL*Plus를 사용합니다.
다른 SQL 클라이언트에는 다른 기본값이 있습니다.

저는 Oracle 사용자는 아니지만(어쨌든 최근에)

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

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

Oracle 문서에 따르면 Date와 Timestamp 사이에는 데이터 크기가 다르기 때문에 Date only 필드를 사용하는 경우에는 Date 형식을 표시하는 것이 적절합니다.또, 「분수 초수나 타임 존이 없습니다」라고 되어 있기 때문에, 타임스탬프 정보가 필요한 경우는 최적인 선택이 아닙니다.

PL/SQL Developer에서 실행된 Oracle SQL Developer - Date 쿼리의 시간 구성 요소를 표시하도록 날짜 필드의 형식을 쉽게 지정할 수 있지만 Oracle SQL Developer에는 표시되지 않습니다.단, 소수 초수나 시간대는 표시되지 않습니다.이 경우 타임스탬프 데이터 타입이 필요합니다.

reason: 타임스탬프가 있는 데이터 열을 보고 있는 경우 _MOST_IMPORTENT_비트는 연도가 됩니다.데이터가 10년 동안 DB에 보관되어 있다면 이 점을 알아두는 것이 중요합니다.해가 먼저 온다.

그 다음 달이 오고, 그 다음 날, 시간, 분이라는 게 말이 돼요객관적으로 시간 데이터가 표시되는 가장 논리적인 시퀀스입니다.

또한 기본적으로 데이터를 표시하는 경우에는 데이터의 가장 중요한 부분만 표시해야 합니다. 따라서 기본적으로는 Y-M-D만 표시할 수 있습니다. 다른 모든 것은 표시할 수 있지만 기본적으로는 SQL 보고서가 복잡하지 않습니다.

Y-M-D가 순차적이므로 Y-M-D를 표시하는 경우 날짜별로 정렬하는 것이 논리적입니다.컴퓨터는 시퀀셜에 능숙하고 논리적으로 보입니다.

마침내.M-D-Y를 원하는 당신의 편견은 당신의 편견입니다.미국에 있는 모든 사람이 이 형식을 사용하는 것은 아닙니다.따라서 가장 논리적인 형식을 사용하고 다른 사용자가 기본적으로 논리적인 형식을 선택하더라도 격분하지 마십시오.

(저는 미국 태생이며 Oracle을 대표하지 않습니다.단, 스스로 생각할 수 있습니다.)

Oracle은 아직 구현하지 않았기 때문에DateTime또는SmallDateTimeMicrosoft로서Sql Server!

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

예를 들어:

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의 일부인 모든 자릿수는 항상 부동 번호의 INTEGER 부분으로 표시됩니다.TIME 파트의 경우 플로트 번호의 DIMAL 파트의 경우 유의한 파트만 표시됩니다.

당연히 TIME 타입의 경우(HH만:MM:SS), DATE 부품이 표시되지 않습니다.

DATE+를 표시하려면Oracle에서 TIME은 DATE 유형을 정의해야 하지만 이는 SQL 표준이 아닙니다.

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