J'essaie donc de convertir des chaînes dans une base de données SQL en valeurs datetime.
J'ai quelques dates dans un tableau comme celui-ci:
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 malheureusement stockés sous forme de chaînes
Et je veux les convertir en datetime
SELECT CONVERT(datetime, analysed, 103 )
FROM OIL_SAMPLE_UPLOAD
Cependant, je reçois ce message lorsque j'exécute la requête
La conversion d'un type de données varchar en un type de données datetime a entraîné une valeur hors plage.
Vraisemblablement parce que certaines valeurs sont mal formées (bien que je ne les ai encore repérées)
C'est ok si certaines valeurs ne sont pas converties, j'ai juste besoin d'un moyen de gérer cette situation.
Quelque chose comme ISNULL (CONVERT (datetime, analysé, 103)) serait bien, sauf que la fonction de conversion ne renvoie pas NULL en cas d'échec.
Pour SQL Server, vous pouvez utiliser la fonction ISDATE () pour vérifier si la valeur est une date valide
SELECT CASE WHEN ISDATE(analysed)=1 THEN CONVERT(datetime, analysed, 103 )
ELSE '' END
FROM OIL_SAMPLE_UPLOAD
Vous pouvez utiliser les fonctions TRY_CONVERT ou TRY_CAST
Si vous voulez juste la partie date, prenez un SUBSTRING
et calculez la date comme suit. Cela pourrait vous donner au moins la bonne date.
SELECT CONVERT(datetime, SUBSTRING(analysed, 0, 11), 103 )
FROM OIL_SAMPLE_UPLOAD