MelRanG
719
2021-03-02 20:54:57
2
156

mysql 쿼리문에러 질문입니다.


SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]

이런 에러가 떠서 구글링하니 쿼리문 문제라는 답변을 찾았습니다.


string으로 저장된 (date형식으로 바꿔도 같은에러) sendDate중 조건에 맞는 하나를 삭제하는 쿼리인데요


        String date = get_date();
        String sql = "DELETE FROM message_info where DATE_FORMAT(sendDate, '%y-%m-%d') < " + date + " limit 1";
        System.out.println("sql: " + sql);
        return jdbc.queryForObject(sql, Collections.emptyMap(), Integer.class);

이게 코드전문이고 println으로 출력결과는

DELETE FROM message_info where DATE_FORMAT(sendDate, '%y-%m-%d') < 2021-03-02 limit 1


이렇게 잘 나옵니다.


문제는 이 쿼리를 그대로 cmd창에서 입력하면 문제없이 삭제되는데 실제로 실행하면 에러가 발생합니다.

ajax를 사용해 버튼을 누를시 삭제를 하도록 세팅했는데

삽입, 조회는 문제없이 동작하는데 왜 삭제만 이런걸까요..??



0
  • 답변 2

  • 캐티
    5k
    2021-03-02 21:06:15 작성 2021-03-02 21:06:40 수정됨

    원래는 '2021-03-02' 이렇게 해줘야 하고 전체 문법 구조를 다 적으면 DATE '2021-03-02' 가 될꺼빈다.

    앞에 시각 리터럴 타입을 명시해줘야하빈다.

    TIME '00:00:00'
    DATE '2000-01-01'
    TIMESTAMP '2000-01-01 00:00:00'

    종종 생략하면 오류가 나게되고 원인을 도통 찾지 못하게 되는 경우가 있어서 붙여주는 편이 좋스빈다.

    MySQL :: MySQL 8.0 Reference Manual :: 9.1.3 Date and Time Literals

  • MelRanG
    719
    2021-03-02 21:16:30

     

     String sql = "DELETE FROM message_info where DATE_FORMAT(sendDate, '%y-%m-%d') < " + date + " limit 1";

    여기서 date 이부분에 Date date 이런식으로 하라는 말씀이신가요...??

  • 로그인을 하시면 답변을 등록할 수 있습니다.