집 >데이터 베이스 >MySQL 튜토리얼 >Oracle의 기본 날짜 형식은 무엇이며 왜 일관성이 없습니까?
오라클 데이터베이스의 기본 날짜 형식은 무엇입니까?
문서에는 다양한 기본 날짜 형식이 지정되어 있지만 실제로 Oracle 날짜에 대한 고정된 형식은 없습니다. 연도(2바이트), 월, 일, 시, 분, 초(각각 1바이트)를 나타내는 7바이트 내부 형식으로 저장됩니다.
왜 이렇게 상충되는 정보가 많나요?
이는 NLS_DATE_FORMAT 세션 매개변수 때문입니다. 이 매개변수는 기본 형식으로 사용되며 사용자의 지역 설정에 따라 달라집니다. 따라서 사용자가 명시적인 문자열을 날짜로 변환하거나 암시적인 변환을 수행할 때 형식 불일치가 발생할 수 있습니다. Oracle은 암시적 문자열을 날짜로 변환하는 동안 NLS_DATE_FORMAT 매개변수를 기반으로 문자열을 해석하려고 시도하여 불일치가 발생합니다.
권장사항
혼란을 피하기 위해 다음 접근 방식을 권장합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!