Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在闰年中查找无效日期_Sql_Sql Server - Fatal编程技术网

Sql 如何在闰年中查找无效日期

Sql 如何在闰年中查找无效日期,sql,sql-server,Sql,Sql Server,我在sql中有一个表,它包含日期列,其中包含日期,我需要在闰年中查找无效日期,例如。 无效日期,即非闰年中的2月31日或2月29日 一个简单的查询会有所帮助。编辑-问题没有提到DBMS,标记指定Ms sql 如果要在MySQL中执行此操作,请执行以下操作: mysql> SELECT DATE_ADD('2012-02-29', INTERVAL 0 DAY); +----------------------------------------+ | DATE_ADD('2012-02-2

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


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

编辑-问题没有提到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\u ADD
将返回NULL。还有其他更好的方法。

您可以使用sql server的ISDATE功能。请参阅: ,

样本:

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

闰年可通过以下方式确定:

 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

如果您有一个日期列,且其类型为
datetime
,则该列不能有无效日期,因为它们在插入之前经过验证。。其他方面,请说明日期在您的列中的格式是的,这是datetime。这意味着我已经有了正确的数据?很抱歉,您能进一步解释一下吗?
ISDATE
如果表达式是有效的日期、时间或日期时间值,则返回1;否则,0。此处“2012年2月31日”返回0,因为它是一个无效日期。如何在其中插入date_of_birth列?事实上,我是SQL的新手。请使用
从您的表中选择出生日期,ISDATE(date\u of\u birth)ValidDT检查数据。对,但我想问题也可以提到,我不认为每个人在回答之前都会看一下标签。