web-dev-qa-db-fra.com

Comment gérer l'erreur de conversion de date dans SQL?

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.

12
sav

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
25
Mudassir Hasan

Vous pouvez utiliser les fonctions TRY_CONVERT ou TRY_CAST

10
Lev Z

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
1
user2989408