mssql 날짜형식 질문드립니다. 0 2 2,877

by 밍밍밍밍 [SQL Query] [2017.10.26 17:56:39]


char 데이터 형식을 datetime 데이터 형식으로 변환하는 중 datetime 값 범위를 벗어났습니다.

Year(createDay) < '2017'

이 조건때문에 에러가 생겼습니다.

컬럼을 조회한결과 2016-06-31값이 문제였습니다.

30일까지 있는데 31이 들어가있어서 그런데

데이터가 별로없어서 눈으로 찾을수 있었는데

혹시 쿼리문으로 날짜가 잘못들어가있는 경우를 찾을수있나요??

by 마농 [2017.10.26 18:22:13]

달력 테이블을 만들어 조인에 실패한 자료를 찾아보세요.

WITH calendar AS
(
-- 달력만들기 --
SELECT '2000-01-01' dt    -- 시작일자
 UNION ALL
SELECT CONVERT(VARCHAR(10), DATEADD(day, 1, dt), 23)
  FROM calendar
 WHERE dt < '2017-12-31'  -- 종료일자
)
, data_t AS
(
-- 원본 데이터 --
SELECT '2016-06-31' createDay
UNION ALL SELECT '2016-06-30'
)
SELECT a.createDay
  FROM data_t a
  LEFT OUTER JOIN calendar b
    ON a.createDay = b.dt
 WHERE b.dt IS NULL
 OPTION (MAXRECURSION 0)
;

 


by 마농 [2017.10.26 18:44:29]


1. 데이터 오류를 찾는게 목적이라면?
  - 위와 같이 찾으시면 되구요.
2. 단순히 오류와 관계 없이 연도 조건을 주는게 목적이라면?
  - 변경전 : Year(createDay) < '2017'
  - 변경후 : createDay < '2017'
3. 이렇게 변경하는 이유는
  - 오류 회피가 목적이 아니라 성능상 좋기 때문입니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입