Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2011, 14h58   #1
Membre à l'essai
 
Inscription : avril 2010
Messages : 75
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 75
Points : 20
Points : 20
Par défaut [SQL2008] convertir une chaine de caractères d'une date écrit sous la norme ISO 8601 en date

Bonjour,

SVP, quelqu'un saurais comment convertir une chaine '2005-05-22T11:26:32' en date ?
J'ai essayé avec convert : select Convert(DateTime, '2007-01-01T12:45:012', 126)
mais j'en ressort l'erreur suivante :
Échec de la conversion d'une valeur datetime à partir d'une chaîne de caractères.

Merci d'avance.
boubou38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 15h05   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
bonjour,


Heu...
peut être en supprimant un des trois chiffres des secondes...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 15h06   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Code :
SELECT CAST( '2005-05-22T11:26:32' AS DATETIME)
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 15h33   #4
Membre à l'essai
 
Inscription : avril 2010
Messages : 75
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 75
Points : 20
Points : 20
Hum .... Je sort... c'était le chiffre de trop qui me bloquait.

En revanche, sur une date test 0001-01-01T00:00:00
Code :
SELECT convert(datetime, '0001-01-01T00:00:00', 126)
me rend :
"La conversion d'un type de données CHAR en type DATETIME a donné une valeur hors limite de date et d'heure."
Y'aurais t'il un moyen de faire passer une tel date ?

Cela me fait de même avec "CAST".
boubou38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 15h51   #5
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
quelle version de sql server utilisez vous ?


Si vous etes sous 2008, vous pouvez utiliser le type DATETIME2, qui accepte les dates à partir de 0001-01-01, à l'inverse de DATETIME, qui n'accepte que les dates à partir de 1753-01-01
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 16h15   #6
Membre à l'essai
 
Inscription : avril 2010
Messages : 75
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 75
Points : 20
Points : 20
Oui, j'utilise Microsoft sql server 2008 R2 Management Studio, mais il me marque le message d'erreur suivant :
"Le type datetime2 n'est pas un type défini par le système."
(tout comme avec les type time, date, datetimeoffset)
boubou38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 17h48   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
j'utilise Microsoft sql server 2008 R2 Management Studio
il faudrait vérifier le niveau de compatibilité de votre base de données, elle est peut-être dans une version antérieure.

Que donne ceci :
Code SQL :
1
2
 
sp_dbcmptlevel 'NomDeVotreBase'
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 06h36   #8
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Vous utilisez Management studio 2008 mais celà ne prouve pas que votre instance est en version 2008.

Que donne ceci:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 09h15   #9
Membre à l'essai
 
Inscription : avril 2010
Messages : 75
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 75
Points : 20
Points : 20
Oui effectivement cela me rend :
"Microsoft SQL Server 2005 - 9.00.5057.00 (X64) Mar 25 2011 13:33:31 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1) "

Y'aurais-il un autre moyen de contourner le problème de la date teste ?
boubou38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 10h22   #10
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Votre problème n'en est pas un : la chaîne de caractère que vous utilisez pour représenter une date + une heure est au format ISO.
Donc la seule chose qui peut fonctionner dans ce cas là est la requête que vous a donné iberserk.
Par ailleurs en utilisant ce format, vous êtes presque certain de vous éviter des ennuis de conversion.

Maintenant si vous souhaitez vous passer de l'heure (c'est à dire mettre les heures, minutes et secondes à zéro), en reprenant le code d'iberserk :

Code :
SELECT CAST(FLOOR(CAST(CAST( '2005-05-22T11:26:32' AS datetime) AS float)) AS datetime)
Si vous parlez de la date 0001-01-01T00:00:00, il n'est pas possible de stocker une telle valeur avec SQL Server 2005.
Quel est le but de la manœuvre ? une telle date ne devrait-elle pas être à NULL ? est-ce que le 1er Janvier 1900 peut convenir ? si non, pourquoi ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 10h35   #11
Membre à l'essai
 
Inscription : avril 2010
Messages : 75
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 75
Points : 20
Points : 20
En effet, une tel valeur est une valeur test. Je ne fais que récupérer des dates d'un fichier xml (donc écrit en chaine) qui se trouve une la base.
Je voulais en effet savoir si il était possible de stocké la date 0001-01-01 en date dans sql serveur 2005, mais comme ce n'est pas possible, je vais donc rajouter une condition pour que celle-ci n'apparraisse pas dans ma recherche.

Merci pour toutes vos réponses, et excusez moi pour la première question bête avec un chiffre de trop alors que je ramais dessus .
boubou38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 12h34   #12
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Citation:
Merci pour toutes vos réponses, et excusez moi pour la première question bête avec un chiffre de trop alors que je ramais dessus
Aucun problème, on est là pour aider, pas pour se taper les uns sur les autres

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 18h06   #13
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par boubou38 Voir le message
excusez moi pour la première question bête avec un chiffre de trop alors que je ramais dessus .
Il n'y a pas a s'excuser, s'est bien souvent les erreurs les plus difficiles a trouver, surtout quand on les à écrites soit même !
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h15.


 
 
 
 
Partenaires

Hébergement Web