我在sql中有一个表,它包含日期列,其中包含日期,我需要在闰年中找到无效日期,例如 无效日期,即2月31日或2月29日,非闰年。
简单的查询会有所帮助。
答案 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;否则,0。
您可以使用以下方法检查现有的表格数据:
SELECT
date_of_birth,
ISDATE(date_of_birth) ValidDate
FROM
YourTable
答案 1 :(得分: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。可能还有其他更好的方法。
答案 2 :(得分: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