Comment gérer la conversion de date d'erreur dans SQL?
Donc je suis en train de convertir des chaînes de caractères dans un SQL databse en valeurs datetime.
J'ai quelques dates dans un tableau comme ceci:
23/12/2013 16:34:32
24/12/2013 07:53:44
24/12/2013 09:59:57
24/12/2013 12:57:14
24/12/2013 12:48:49
24/12/2013 13:04:17
24/12/2013 13:15:47
24/12/2013 13:21:02
24/12/2013 14:01:28
24/12/2013 14:02:22
24/12/2013 14:02:51
Ils sont stockés sous forme de chaînes malheureusement
Et je veux les convertir en datetime
SELECT CONVERT(datetime, analysed, 103 )
FROM OIL_SAMPLE_UPLOAD
Mais j'ai ce message quand je lance la requête
La conversion d'un type de données varchar à un type de données datetime abouti
dans une gamme de valeur.
Sans doute parce que certaines valeurs sont mal formé (même si je suis encore à l'endroit)
C'est ok si certaines valeurs ne se convertissent pas, j'ai juste besoin d'un moyen de gérer cette situation.
Quelque chose comme ISNULL(CONVERT(datetime, analysé, 103 )) serait de bon, sauf que la fonction "convertir" ne renvoie pas NULL quand il échoue.
OriginalL'auteur sav | 2014-01-29
Vous devez vous connecter pour publier un commentaire.
Pour SQL Server, vous pouvez utiliser ISDATE() fonction pour vérifier si la valeur est une date valide
Ce n'est pas de faire toutes les modifications de base de données , c'est uniquement pour la vérification de la durée d'exécution de la requête
Pour ce travail, j'aurais besoin de SET DATEFORMAT à dmy.
Je peux résoudre ce problème en utilisant STUFF(STUFF(analysés, 4, 2, SUBSTRING(analysés, 1, 2)), 1, 2, SUBSTRING(analysés, 4, 2))
Lorsque j'exécute cette requête:
SELECT * FROM new WHERE ISDATE(new.MaxDate)=1 and Cast(new.MaxDate as datetime) >= Cast('01/19/2016' as datetime)
il me donne cette erreur :Msg 241, Level 16, State 1, Line 2 Conversion failed when converting date and/or time from character string.
-- quelqu'un peut me dire pourquoi? Ou comment je peux retrouver la ligne qui a provoqué cette erreur? Il retourne 218 lignes quand il lance ce message d'erreur, et si j'ajouteand try_Cast(new.MaxDate as datetime) is not null
alors je n'ai pas d'erreur; elle renvoie à 2 000+ lignes!OriginalL'auteur
Vous pouvez utiliser TRY_CONVERT ou TRY_CAST fonctions
OriginalL'auteur
Si vous voulez juste la partie de la date, puis prendre un
SUBSTRING
et calculer la date comme suit. Cela peut vous obtenir la date exacte de la partie au moins.OriginalL'auteur