>데이터 베이스 >MySQL 튜토리얼 >Oracle의 기본 날짜 형식은 무엇이며 왜 일관성이 없습니까?

Oracle의 기본 날짜 형식은 무엇이며 왜 일관성이 없습니까?

DDD
DDD원래의
2025-01-16 16:36:09926검색

What's the Default Date Format in Oracle and Why is it Inconsistent?

오라클 데이터베이스의 기본 날짜 형식은 무엇입니까?

문서에는 다양한 기본 날짜 형식이 지정되어 있지만 실제로 Oracle 날짜에 대한 고정된 형식은 없습니다. 연도(2바이트), 월, 일, 시, 분, 초(각각 1바이트)를 나타내는 7바이트 내부 형식으로 저장됩니다.

왜 이렇게 상충되는 정보가 많나요?

이는 NLS_DATE_FORMAT 세션 매개변수 때문입니다. 이 매개변수는 기본 형식으로 사용되며 사용자의 지역 설정에 따라 달라집니다. 따라서 사용자가 명시적인 문자열을 날짜로 변환하거나 암시적인 변환을 수행할 때 형식 불일치가 발생할 수 있습니다. Oracle은 암시적 문자열을 날짜로 변환하는 동안 NLS_DATE_FORMAT 매개변수를 기반으로 문자열을 해석하려고 시도하여 불일치가 발생합니다.

권장사항

혼란을 피하기 위해 다음 접근 방식을 권장합니다.

  • 날짜 리터럴: DATE '2018-01-25'
  • 타임스탬프 리터럴: TIMESTAMP '2018-01-25 01:23:45'
  • 명시적인 TO_DATE 변환: TO_DATE('25-JUN-18', 'DD-MON-RR')

NLS_DATE_FORMAT 수정

세션에서 NLS_DATE_FORMAT을 변경하려면 다음 명령을 사용하세요.

<code class="language-sql">ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';</code>

NLS_DATE_FORMAT의 기본값

NLS_DATE_FORMAT의 기본값은 사용자의 로케일을 나타내는 NLS_TERRITORY 세션 매개변수에 따라 달라집니다. 다양한 지역에서 어떤 형식이 사용되는지 확인하려면 다음 쿼리를 실행하세요.

<code class="language-sql">SET SERVEROUTPUT ON;

VARIABLE cur REFCURSOR;

DECLARE
  territories SYS.ODCIVARCHAR2LIST;
  formats     SYS.ODCIVARCHAR2LIST := SYS.ODCIVARCHAR2LIST();
BEGIN
  SELECT value
  BULK COLLECT INTO territories
  FROM v$nls_valid_values
  WHERE parameter = 'TERRITORY'
  ORDER BY value;

  formats.EXTEND(territories.COUNT);
  FOR i IN 1 .. territories.COUNT LOOP
    EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_TERRITORY='''||territories(i)||'''';

    SELECT value
    INTO formats(i)
    FROM NLS_SESSION_PARAMETERS
    WHERE PARAMETER = 'NLS_DATE_FORMAT';
  END LOOP;

  OPEN :cur FOR
  SELECT f.format AS format,
         LISTAGG(t.territory, ', ') WITHIN GROUP (ORDER BY t.territory) AS territories
  FROM (SELECT ROWNUM AS rn, COLUMN_VALUE AS territory FROM TABLE(territories)) t
         INNER JOIN
         (SELECT ROWNUM AS rn, COLUMN_VALUE AS format FROM TABLE(formats)) f
         ON (f.rn = t.rn)
  GROUP BY f.format;
END;
/

PRINT :cur;</code>

위 내용은 Oracle의 기본 날짜 형식은 무엇이며 왜 일관성이 없습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.