IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Récupérer une colonne DATETIME avec les millisecondes dans une requête SELECT


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Récupérer une colonne DATETIME avec les millisecondes dans une requête SELECT
    J'ai une table SQL avec une colonne au format datetime.

    Quand j'enregistre une ligne via une application vb.net j'utilise une requête SQL du type INSERT INTO ...(.. , '13/02/2015 20:52:07.123',...)
    Quand je visualise le résultat depuis SQL Management Studio, je retrouve bien '13/02/2015 20:52:07.123', donc on peux penser que le format a bien été reconnu et enregistré.
    Quand je veux récupérer une ligne depuis mon application vb.net, je le fais à l'aide d'une requête du style "SELECT * FROM matable", mais quand je traite le champ correspondant à la date, le résultat est sous forme de chaîne de caractère : '2/13/2015 8:52:07 PM'
    Mes questions sont :
    - Existe-t-il un moyen global de spécifier le format retourné par toutes les requêtes SQL pour les colonnes de type datetime ? (style : jj/mm/yyyy hh:MM:ss.fff), ce qui éviterai de complexifier mes requêtes SQL.
    - Si non, comment faire une requête SQL qui me renverrai la date au même format que pour l'insertion.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,

    Citation Envoyé par PFabrice Voir le message
    J'ai une table SQL avec une colonne au format datetime.

    - Existe-t-il un moyen global de spécifier le format retourné par toutes les requêtes SQL pour les colonnes de type datetime ? (style : jj/mm/yyyy hh:MM:ss.fff), ...
    - Si non, comment faire une requête SQL qui me renverrai la date au même format que pour l'insertion.
    Le format que t'as choisi ( en rouge) est plutôt le format hégirien (calendrier musulman). Tu pourrais écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CONVERT(VARCHAR(25), MaDate, 131)
    le code 131 est le code du format. Il existe plusieurs formats. tu peux t'exercer en suivant ce tuto Le type Datetime de SQL-Server; Pour ta date spécifiée, tu pourras la sélectionnée en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CAST('13/02/2015 20:52:07.123' AS DATETIME)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CAST(Madate AS DATETIME) de façon générale
    Cordialement.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse,

    Je connaissais cette méthode pour convertir les dates mais ça suppose qu'on connait par avance les colonnes qu'on va récupérer et qu'on les spécifie dans la requête SELECT.

    Je voulais surtout un paramètres général spécifiant à SQL Server de retourner toutes les datetime à un format particulier.

    Ce qui me permet de faire des requêtes du style SELECT * FROM maTable sans me soucier de savoir s'il y a des colonnes de type datetime dans la table.

    Il doit bien y avoir un moyen de dire à SQL Server comment retourner les datetime ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Citation Envoyé par PFabrice Voir le message
    Merci pour ta réponse,

    Il me semble que t'as pas lu le tuto en entier, sinon t'as aurais eu un format convenable, il existe plusieurs formats.
    Je voulais surtout un paramètres général spécifiant à SQL Server de retourner toutes les datetime à un format particulier.

    Ce qui me permet de faire des requêtes du style SELECT * FROM maTable sans me soucier de savoir s'il y a des colonnes de type datetime dans la table.

    Il doit bien y avoir un moyen de dire à SQL Server comment retourner les datetime ?
    Tu voudrais faire des requêtes sur une colonne sans te soucier du type de donnée de celle-ci, c'est imprudent, et on s'expose aux messages d'erreurs.

    Par défaut, SQL SERVER enregistre les données monétaires, dates... en fonction des paramètres régionaux définies sur le poste. Donc aux USA, ces paramètres ne seront pas les même qu'en France. Pour savoir le format par défaut des dates sur ton serveur, il suit de faire:
    Tu pourrais consulter ces pages DATETIME SQL et SET DATEFORMAT.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    En fait c'est un peu exagéré quand je dis 'sans me soucier', ce que je voulais dire c'est que j'ai plusieurs tables qui contiennent des colonnes de type 'datetime' dans lesquelles j'enregistre des informations précises à la milliseconde, et comme je fais des requêtes du type "SELECT *" je ne voulais pas décrire la liste des colonnes dans mon select.
    Je suis sur une machine Windows 7 français, un SQL Server Français paramétré en langage Français, mais il me retourne des dates avec un format non français par défaut (2/13/2015 8:52:07 PM), j'ai donc dû rater quelque chose.
    Comme je le précise dans mon premier post, si je tape la requête dans management studio le résultat est correct (date en français avec les millisecondes), donc je pense que mon problème vient plutôt de mon code côté Visual studio.
    Je vais chercher de ce côté je pense.
    Merci encore pour ta réponse.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Bonjour,

    Change la langue par défaut de SQL SERVER comme suit : SSMS -->Clic droit sur l'instance serveur --> Propriétés -->Avancé, et là t'auras cette figure, change la langue pour French. La date sera désormais au format français.

    ---> résultat : 2015-02-16 08:41:22.887

    Tu pourras insérer les dates sous ce format.

    Cordialement.
    Images attachées Images attachées  

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Après vérification SQL est déjà en Français, la preuve est que quand je fais une requête dans le management studio j'ai le bon format.
    Je pense que mon problème vient de la méthode que j'utilise pour récupérer les données dans mon logiciel écrit en VB.NET dont voici un extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
                Dim dAdapter as Object = New SqlDataAdapter("SELECT * FROM maTable", sConnexionString)
     
                If dAdapter IsNot Nothing Then
                    dAdapter.Fill(dSet)
                    bSource.DataSource = dSet.Tables(0).DefaultView
    Quand je parcours la liste des enregistrements renvoyés dans bSource, les données sont toutes de type 'string' et la date n'est pas au format Français.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    Dans ce cas, fais une sélection des colonnes en prenant le soin de modéliser ta date au format voulu comme précisé plus haut.

  9. #9
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 421
    Points
    7 421
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Juste comme ça en passant : le type DATETIME ne gère pas les millisecondes, puisque sa précision est de l'ordre de 3 millisecondes.
    De plus, c'est un type déprécié.

    Utilisez plutôt le type DATETIME2 à la place, qui respecte le standard SQL, et a effectivement une précision de 1 milliseconde.

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/03/2015, 11h46
  2. Réponses: 3
    Dernier message: 02/04/2013, 23h10
  3. [XL-2010] Copier les cellules d'une colonne dont la valeur à changé dans une autre colonne
    Par caeruleum dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/09/2012, 22h01
  4. Mettre les données d'une colonne d'un fichier Excel dans une ArrayList
    Par kortobi dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 05/09/2012, 19h40
  5. Réponses: 3
    Dernier message: 27/07/2012, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo