2012-12-26 39 views
3

嗯,我在sql中有一個表格,它包含帶有日期的日期列,並且我需要在閏年中找到無效日期。 無效日期,即2月31日或2月29日的非閏年。如何在閏年中找到無效日期

一個簡單的查詢將有所幫助。

+11

如果你有一個日期列,其類型爲'日期時間「,那麼它不能有無效的日期,因爲它們在插入之前進行驗證。另外請註明日期在列中的格式 –

+0

是的,它是日期時間。所以這意味着我已經有了正確的數據? –

回答

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返回1,如果該表達式是有效的日期,時間,或日期時間值;

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

對不起,請你解釋一下嗎? –

+0

如果表達式是有效的日期,時間或日期時間值,那麼'ISDATE'返回1;否則爲0.此處'31 -Feb-2012'返回0,因爲它是無效日期。 – TechDo

+0

以及我如何在其中插入date_of_birth列?其實我是新來的sql –

1

編輯 - 問題沒有提到關於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