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 :

SQL Server 2005 - question basique


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 2
    Points
    2
    Par défaut SQL Server 2005 - question basique
    Bonjour,

    Je vous prie de m'excuser de vous déranger avec une question d'utilisatrice et non de développeuse. Je suis confrontée à un problème qu'il faut que je résolve très rapidement et je tente donc de taper à votre porte...

    Je fais de la cartographie et mes données sont stockées dans SQL server. Je viens de "récupérerer" l'administration d'une base de données comportant plusieurs champs dates dont le format est en nvarchar (et oui, je sais qu'il faudrait que ce soit en datetime). Les valeurs de ces dates sont déroutantes... du genre 10020919 ou encore 61020002... Cela résulte d'une conversion hasardeuse? Est-il possible, selon vous, de récupérer les dates dans un format compréhensible?
    Je vous remercie par avance de votre aide et je m'excuse encore de vous solliciter.

    Bien cordialement

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Je vous prie de m'excuser de vous déranger avec une question d'utilisatrice et non de développeuse
    Détendez-vous, on est sur un forum

    Les valeurs de ces dates sont déroutantes... du genre 10020919 ou encore 61020002
    Effectivement cela ne ressemble pas à un format connu.
    Par exemple le format de date ISO est AAAAMMJJ, et le format ANSI est AAAA.MM.JJ ...

    J'ai pensé qu'il s'agit d'un nombre de secondes, mais depuis quand ?
    N'avez-vous aucun moyen de savoir comment sont stockées ces dates ?

    @++

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Merci de votre réponse

    A priori non. Ces données étaient en lien avec mon logiciel de cartographie GéoConcept. Je ne comprends pas comment s'est produit cette conversion. Je viens de constater que sur une autre table du même thème il y a différents formats de date (ex : 20071113, 08020119 et 04/08/2007, tout ça dans la même colonne). Je ne comprends pas comment une telle chose a pu se produire. Mais comme je récupère cette base "en l'état" et sans historique, c'est pas simple...
    J'espérais que cela "dirait" quelque chose à quelqu'un...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Résolu !
    J'ai trouvé comment "restaurer" mes dates.
    Je ne sais pas le pourquoi du comment mais certains chiffres sont inversés, le 1er avec le 4ème et le 2ème avec le 5ème.
    Ainsi 61020020 correspond à 20061020.
    Je vais remettre tout ça dans l'ordre. Ouf !
    Bonne journée à vous

  5. #5
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 791
    Points : 3 058
    Points
    3 058
    Par défaut
    Je suis plutôt perplexe : pourquoi le programmeur aurait-il fait cela ? Pour brouiller les cartes? C'est l'unique possibilité que je vois et je ne pense pas qu'un informaticien puisse faire cela.

    Votre déduction est-elle correcte pour tous les enregistrements de votre table (ou est-ce uniquement une jolie coïncidence) ?

    Comme vous, j'ai été confronté à un problème de ce type à savoir un champs qui devrait contenir des informations DateTime mais qui semblait contenir autre chose (voir première colonne de mon tableau ci-dessous).

    Un collègue m'avait alors expliqué que les dates étaient au format Unix timestamp (voir aussi http://mysql.databases.aspfaq.com/ho...timestamp.html)

    Voici ce que j'ai dans ma base de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Open_Date   
    1031839200  
    1161151132  
    1168873004
    Partant de là, j'ai créé une petite fonction dans ma base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    /****************************************************************************************************************
     
    Created By/Date : Christophe Avonture / October 2008
     
    Purpose         : Convert an Unix date (as stored in the call_req table (field Open_Date f.i.) into a system date-time
     
    Usage           : Intern & SSRS
     
    Parameters      : 
     
       @dte           Int
     
    Example         : SELECT dbo.udf_ConvertUnixDate(call_req.Open_Date) As Open_Date, * FROM mdb.dbo.call_req
     
    Modified History
     
    Name/Date Purpose
     
    ******************************************************************************************************************/
     
    CREATE FUNCTION [dbo].[udf_ConvertUnixDate]
    (
       @dte As Int
    )
     
    RETURNS DateTime
     
    AS
     
    BEGIN
     
       RETURN DATEADD(hh, DATEDIFF(hh, GetUTCDate(), GETDATE()), DATEADD(s, @dte, '19700101'))
     
    END
    Cette fonction va recevoir en paramètre la date Unix pour retourner une date au format Windows.

    Et donc l'appel se fait ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Open_Date, dbo.udf_ConvertUnixDate(call_req.Open_Date) As Windows_Open_Date FROM mdb.dbo.call_req
    J'obtiendrais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Open_Date    Open_Date
    1031839200    2002-09-12 15:00:00.000
    1161151132    2006-10-18 06:58:52.000
    1168873004    2007-01-15 15:56:44.000
    A tester sur un jeu d'enregistrements de ta base de données afin de voir si cet algorithme est correct dans ton cas ou pas.

    Bonne chance.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/03/2008, 10h00
  2. [SQL Server 2005] Questions sur les droits
    Par Reskibil dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/10/2007, 16h56
  3. [SQL Server 2005] question architecture
    Par phil89 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/06/2007, 09h26
  4. [SQL SERVER 2005] probleme basique
    Par barnet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/06/2007, 16h17
  5. [Sql Server 2005] Question a propos des champs unicode
    Par siaoly dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/06/2006, 15h00

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