3

好吧,我在 sql 中有一个表,它包含带有日期的日期列,我需要在闰年找到无效日期,例如无效日期,即非闰年的 2 月 31 日或 2 月 29 日。

一个简单的查询会有所帮助。

4

3 回答 3

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;否则为 0。

您可以使用以下方法检查现有表数据:

SELECT 
    date_of_birth, 
    ISDATE(date_of_birth) ValidDate 
FROM 
    YourTable
于 2012-12-26T11:46:02.267 回答
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。可能还有其他更好的方法。

于 2012-12-26T11:44:26.137 回答
1

闰年可以这样确定:

 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
于 2012-12-26T22:09:53.557 回答