2012-12-26 3 views
3

글쎄 SQL에 테이블이 있고 날짜가 포함 된 날짜 열이 있고 윤년에 잘못된 날짜를 찾아야합니다. 비 유효 기간 인 2 월 31 일 또는 2 월 29 일의 날짜가 올바르지 않습니다.윤년에 유효하지 않은 날짜를 찾는 방법

간단한 쿼리를 사용하면 도움이됩니다.

+11

당신은 날짜 열이 있고 그 유형은'인 경우 datetime' 다음에는 유효하지 않은 날짜가있을 수 없습니다. 삽입되기 전에 유효성이 검사됩니다. 다른 현명한 날짜 형식을 사용하십시오. –

+0

예 datetime입니다. 그래서 나는 이미 올바른 데이터를 가지고 있다는 것을 의미합니까? –

답변

6

SQL Server의 ISDATE 기능을 사용할 수 있습니다. 를 참조하십시오 : ISDATE (Transact-SQL), Validate DateTime String in SQL Server 2005

샘플 :

SELECT dt, ISDATE(dt) ValidDate 
FROM(
    SELECT '31-Feb-2012' AS dt UNION 
    SELECT '31-Jan-2012' AS dt 
)x 

ISDATE 반환 한 표현이 유효한 날짜, 시간, 또는 날짜 값 인 경우;

SELECT 
    date_of_birth, 
    ISDATE(date_of_birth) ValidDate 
FROM 
    YourTable 
+0

죄송합니다. 더 자세히 설명해 주시겠습니까? –

+0

ISDATE는 표현식이 유효한 날짜, 시간 또는 날짜 시간 값이면 1을 반환하고, 그렇지 않으면 '31 -Feb-2012 '는 유효하지 않은 날짜이므로 0을 반환합니다. – TechDo

+0

그리고 date_of_birth 열을 어떻게 삽입합니까? 실제로 인스턴트 메신저 새 –

1

EDIT - DBMS에 대해서는 언급하지 않았지만 태그는 Ms-sql을 지정합니다.

당신은 MySQL에서 그것을하고 싶은 경우 :

유효하지 않은 날짜를 들어
mysql> SELECT DATE_ADD('2012-02-29', INTERVAL 0 DAY); 
+----------------------------------------+ 
| DATE_ADD('2012-02-29', INTERVAL 0 DAY) | 
+----------------------------------------+ 
| 2012-02-29        | 
+----------------------------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT DATE_ADD('2011-02-29', INTERVAL 0 DAY); 
+----------------------------------------+ 
| DATE_ADD('2011-02-29', INTERVAL 0 DAY) | 
+----------------------------------------+ 
| NULL         | 
+----------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 

, DATE_ADD는 NULL을 반환합니다. 다른 더 좋은 방법이있을 수 있습니다.

+1

그것은 "sql-server"라는 태그가 붙어 있으며 처음부터 ... –

+0

맞아요,하지만 질문에 대해서도 언급 할 수 있습니다. 모든 사람들이 응답하기 전에 태그를 살펴 보지 않을 것이라고 생각합니다. – Swapnil

1

윤년이에 의해 결정될 수있다 : 그렇지 않으면 0

당신은 사용하여 기존 테이블 데이터를 확인하실 수 있습니다

if year modulo 400 is 0 then 
    is_leap_year 
else if year modulo 100 is 0 then 
    not_leap_year 
else if year modulo 4 is 0 then 
    is_leap_year 
else 
    not_leap_year 
관련 문제