programing

SQL "올바른 달이 아님"

elecom 2023. 10. 15. 16:58
반응형

SQL "올바른 달이 아님"

sql의 표는 다음과 같습니다.

CREATE TABLE Reserves(
    sid INTEGER,
    bid INTEGER,
    day DATE,
    PRIMARY KEY (sid, bid, day),
    FOREIGN KEY (sid) REFERENCES Sailors,
    FOREIGN KEY (bid) REFERENCES Boats
);

거기에 삽입하려고 합니다.

INSERT INTO Reserves VALUES(22, 101, '01-01-1998');

그러나 오류가 발생합니다: ORA-01843: not avalid month

이건 Oracle db입니다.제 데이트 형식에 무슨 문제가 있는지 잘 모르겠습니다.

어떤 것을 원하셨는지 완전히 명확하지는 않으므로 다음을 시도해 보십시오.

  • 월-일-년 형식의 경우:

    INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','MM-DD-YYYY'));

  • 일-월-년 형식의 경우:

    INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','DD-MM-YYYY'));

또한 권장 읽기:Oracle 기능: TO_DATE

사용할 수 있습니다.date키워드를 지정하여 ANSI 표준 날짜 문자열을 지정합니다.

INSERT INTO Reserves VALUES(22, 101, date '1998-01-01');

이 경우 형식은 YYY-MM-DD 또는 1998년 1월 1일입니다.

@Jody도 언급했듯이,
이 코드를 한 번 실행하면 세션의 기본값을 변경할 수 있습니다.INSERT:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MM-YYYY';

원하는 순서대로 양식을 변경할 수 있습니다.

출처: dba-oracle.com

'1998-01-01'을 시도해 보십시오.

오라클의 기본 날짜 형식은 yyy-mm-dd인 것 같습니다.alter session set nls_date_format='mm-dd-yyyy'를 사용하여 세션의 기본값을 변경할 수 있습니다.

대부분의 고객은 원하는 대로 이 옵션을 영구적으로 설정할 수 있습니다.

아래 쿼리 형식을 사용해 볼 수도 있습니다.

INSERT INTO Reserves VALUES(22, 101, DATE '01-01-1998');

DATE키워드는 다음 문자열을 날짜로 해석합니다.

이 방법을 사용해 보십시오. 문제가 해결됩니다.

INSERT INTO Reserves VALUES(22, 101, TO_DATE('01-01-1998','DD-MM-YYYY');

언급URL : https://stackoverflow.com/questions/13002590/sql-not-a-valid-month

반응형