IsDate Function dans SQL évalue les dates non valides comme valides

J'exécute une instruction SQL par rapport aux données imscopes à partir de files Excel. Dans ce SQL, je vérifie si les users ont correctement entré les dates en utilisant la fonction IsDate. Comme il s'agit d'une donnée brute qui n'a pas encore été convertie, toutes les dates sont stockées dans un champ de type de données varchar.

Dans certaines circonstances, IsDate renvoie 1 (date valide) lorsqu'il existe clairement un format de date incorrect saisi par l'user.

Par exemple:

07/001/2012 2012-07-002 007/002/2012 

Des suggestions sur la façon de gérer ce problème?

 SELECT * FROM tblImport WHERE (ISDATE(dt) = 0 AND (dt is not null AND dt <> '')) 

Merci!

ps Smacking users n'a pas aidé.

Je fais beaucoup de travail de conversion de données et voici une fonction que j'ai créée et que j'utilise pratiquement tous les jours pour éliminer les mauvaises dates:

 CREATE FUNCTION dbo.fnCheckDate (@InDate nvarchar(50)) RETURNS DATETIME AS BEGIN declare @Return DATETIME select @return = CASE WHEN ISDATE(@InDate) = 1 THEN CASE WHEN CAST(@InDate as DATETIME) BETWEEN '1/1/1901 12:00:00 AM' AND '6/6/2079 12:00:00 AM' THEN @InDate ELSE null END ELSE null END return @return END GO 

Résultats:

 SELECT dbo.fnCheckDate('07/001/2012') --> Returns 2012-07-01 00:00:00.000 SELECT dbo.fnCheckDate('2012-07-002') --> Returns 2012-07-01 00:00:00.000 SELECT dbo.fnCheckDate('007/002/2012') --> Returns 2012-07-01 00:00:00.000 SELECT dbo.fnCheckDate('00/002/2012') --> Returns Null SELECT dbo.fnCheckDate('006/031/2012') --> Returns Null SELECT dbo.fnCheckDate('') --> Returns Null 

Essayez de définir le dateformat premier – cela a fonctionné pour moi quand je voyais des exceptions.

 set dateformat dmy select IsDate(<column>) from Table 

peut-être juste vérifier DEN LEN? cependant, il ne peut pas gérer les cas lorsque le len est valide. Peut-être que la validation des inputs devrait avoir lieu dans le frontend?