2010-05-06 4 views
30

J'ai essayéComment convertir une chaîne "jj/mm/aaaa" en datetime dans SQL Server?

SELECT convert(datetime, '23/07/2009', 111)

mais nous avons eu cette erreur

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Cependant

SELECT convert(datetime, '07/23/2009', 111)

est OK si

Comment réparer le 1er?

+0

Avez-vous essayé d'utiliser le format UTC 'YYYY-MM-DD'? C'est une approche au moins cohérente et non soumise aux paramètres spécifiques au pays. – Lazarus

+0

Avez-vous essayé de stocker les valeurs de date comme horodatages de l'époque, qui sont beaucoup plus faciles à gérer que les chaînes? –

+0

Le temps de l'époque est tout sauf inutile pour les dates après 2037, ou avant 1903 ou plus. Presque n'importe quelle fonction qui utilise un ou fonctionne avec un s'attend à ce qu'il soit un int signé (32 bits, 31 de toute façon). Vous voulez utiliser 64 bits, vous risquez de perdre les bits élevés de votre date. – cHao

Répondre

59

Le dernier argument de CONVERT semble déterminer le format utilisé pour l'analyse. Consulter MSDN docs for CONVERT.

111 - celui que vous utilisez est le Japon yy/mm/dd.

Je suppose que celui que vous cherchez est 103, c'est dd/mm/yyyy.

Alors vous devriez essayer:

SELECT convert(datetime, '23/07/2009', 103) 
+0

'103' est' jj/mm/aaaa 'selon [MS docs] (https://msdn.microsoft.com/fr-FR/ library/ms187928.aspx) –

7

Essayez:

SELECT convert(datetime, '23/07/2009', 103) 

c'est la norme britannique/français.

0
SELECT convert(varchar(10), '23/07/2009', 111) 
+0

Pourquoi cela fonctionne-t-il – Mark

+0

Il devrait être commenté – Chinna

0

SQL Server utilise par défaut le format de date mdy et ainsi le fonctionnement ci-dessous:

SELECT convert(datetime, '07/23/2009', 111) 

et cela ne fonctionne pas:

SELECT convert(datetime, '23/07/2009', 111) 

J'ai moi-même du mal à trouver avec une seule requête qui peut gérer les deux formats de date: mdy et dmy.

Cependant, vous devriez être d'accord avec le troisième format de date - ymd.

0
SELECT convert(datetime, '23/07/2009', 103) 
Questions connexes