假设表名:bb,日期字段为:dd
mysql>delete from bb where (month(dd)<=0 || month(dd)>12);
其他类似,可用day(dd)<=0 || day(dd)>31作日的判断,另外具体情况可以自己添加.

解决方案 »

  1.   

    用 TO_DAYS() 判断
    分别对两种结果进行处理,
    一种 结果是 NULL, 一种结果是数据SET @dt = '2002-2-31';
    SELECT DATE_FORMAT(@dt,'%Y-%m-%d')
    , FROM_DAYS(TO_DAYS(@dt))
    , DATE_FORMAT(@dt,'%Y-%m-%d') = FROM_DAYS(TO_DAYS(@dt));
    SET @dt = '2002-00-31';
    SELECT DATE_FORMAT(@dt,'%Y-%m-%d')
    , FROM_DAYS(TO_DAYS(@dt))
    , DATE_FORMAT(@dt,'%Y-%m-%d') = FROM_DAYS(TO_DAYS(@dt));-- 所以下面的 WHERE 字句就是你要的结果SELECT User FROM mysql.user WHERE TO_DAYS(@dt) IS NULL OR (DATE_FORMAT(@dt,'%Y-%m-%d') <> FROM_DAYS(TO_DAYS(@dt)));