날짜를 포함하지 않아야하는 날짜가 데이터베이스에 포함되어 있으므로 날짜를 확인하여 올바른 날짜를 구성해야합니다. 일부,데이터 형식 날짜를 구성 할 수 없습니다. 일부 인수의 값이 올바르지 않습니다.
SELECT
NewDate = CASE
WHEN DATEPART(dayofyear, GETDATE()) < DATEPART(dayofyear, t.myDate)
THEN DATEFROMPARTS('2017', DATEPART(MONTH,t.myDate), DATEPART(DAY, t.myDate))
ELSE DATEFROMPARTS('2018', DATEPART(MONTH,t.myDate), DATEPART(DAY,t.myDate))
END
FROM
MyTable t
그러나 이 (t.myDate이 널 (NULL) 날짜입니다) (날짜가 올해는 아직 오지 않으면, 나는 날짜가 지난 경우, 나는 2018을 설정하려면, 2017을 설정할) 경우 다음과 같은 오류 메시지가 나타납니다.
일부 인수에는 유효하지 않은 값이 있습니다.
문제가 무엇인지 확실하지 않지만 일부 행이 NULL임을 알고 있습니다. 그래서 간단하게 문제가있는 경우에 오늘 날짜를 사용하는 CASE 표현식을 사용하여 문제를 해결하기 위해 노력했다 :
SELECT
NewDate = CASE
WHEN t.myDate is null
THEN GETDATE()
WHEN DATEPART(MONTH,t.myDate) < 1
THEN GETDATE()
WHEN DATEPART(MONTH,t.myDate) > 12
THEN GETDATE()
WHEN DATEPART(DAY,t.myDate) < 1
THEN GETDATE()
WHEN DATEPART(DAY,t.myDate) > 31
THEN GETDATE()
WHEN ISDATE(t.myDate) = 0
THEN GETDATE()
WHEN DATEPART(dayofyear, GETDATE()) < DATEPART(dayofyear, t.myDate)
THEN DATEFROMPARTS('2017', DATEPART(MONTH,t.myDate), DATEPART(DAY, t.myDate))
ELSE DATEFROMPARTS('2018', DATEPART(MONTH,t.myDate), DATEPART(DAY,t.myDate))
END
FROM
MyTable t
하지만 난 여전히 같은 오류가 발생합니다. 잘못된 데이터 품질 문제를 테스트 중이거나 CASE식이 예상대로 작동하지 않습니다.
또한 : 그것은 NULL 행에 대한 where 절을 사용하는 데 도움이되지 않습니다
WHERE t.myDate IS NOT NULL
가 어떻게 데이터 품질 문제를 찾을 수 있습니다, 나는 주위 어떻게받을 수 있나요?
외에 당신은 또한 월 29 일에 문제가있을 수 있습니다 NULL 검사에서
감사합니다. 그 것을 확인하려고합니다. – Skywise
예, 효과가있었습니다. DATEPART (MONTH, t.myDate) = 2 및 DATEPART (DAY, t.myDate) = 29) \t \t 다음 DATEPROMPARTS ('2018 ', DATEPART (MONTH, t.myDate), DATEPART (DAY, DATEADD (DAY, -1, t.myDate))) – Skywise