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 :

Convertion BIGINT TO UTC DATE


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut Convertion BIGINT TO UTC DATE
    Bonjour,

    Je travaille actuellement sur une base de données SQL serveur 2005 que j'ai récupérer auprès d'un de mes clients.

    cependant je rencontre des difficulté quant à un champ DATE nommé "SampleDateTime" qui au format BIGINT

    Mon soucis est que j'ai besoin de ces dates au format UTC ce format plus précisement : jj/mm/yyyy 00:00:00

    voici un exemple des données issues de ce champ :

    634138919290000000
    634138920380000000
    634138920430000000
    634138920480000000
    634138920780000000
    634138920980000000
    634138921930000000
    634138922380000000
    634138922930000000
    634138922980000000
    634138923030000000
    634138923080000000
    634138923180000000
    634138923230000000
    634138923330000000
    634138923430000000
    634138923630000000
    634138924280000000
    634138925370000000
    A titre indicatif ces dates sont comprise entre début 2010 et fin 2011

    j'ai pu en déduire qu'il y a un interval de 10 secondes entre chaque enregistrement...

    Est-ce que quelqu'un pourrai m'expliquer quels calculs je dois effectuer pour obtenir une date au format souhaité ci-dessus ?

    je ne souhaite pas passer par une fonction ou une procédure j'ai juste besoin de savoir comment transformer ce chiffre en date étapes par étape si c'est possible...

    Une truc de ce genre là :
    http://beyondrelational.com/blogs/mi...-datetime.aspx

    Est t'il possible de réaliser celà avec des diviser, multiplier, plus, et des moins savoir quels chiffres correspond à quelle donnée...

    merci par avance pour votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Par défaut
    Difficile de t'apporter une réponse précise. Néanmoins quelques pistes :

    --> Si possible tu peux utiliser l'application qui permet d'alimenter la table afin d'essyer de trouver ce qui se passe en coulisse.

    Par exemple, tu peux sélectionner/entrer une date (ou date heure) via l'application cliente et voir la valeur stockée dans la table.
    Et ceci pour plusieurs valeurs de date (date-heure)
    L'idée : essayer d'établir une relation entre les données datetime et la valeur BIGINT.

    Précaution : être en mono-utilisateur sur la base et sur l'appli.

    --> demander au client s'il y a une documentation quelque part qui peut t'aider ( ce que je doute fort ...)

    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

  3. #3
    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 : 44
    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
    Par défaut
    Bonjour,

    J'ai cherché un moment et la solution est dégoûtante de simplicité, encore faut-il savoir que les valeurs que vous donnez sont des entiers epoch.
    C'est-à-dire qu'il représentent le nombre de dixième de microsecondes écoulées depuis le premier Janvier 1900, puisque nous sommes sous Windows (Sous Unix c'est le 1er Janvier 1970).

    Le problème c'est qu'en faisant la conversion directement avec un DATEADD, on est directement confronté à un dépassement arithmétique qu'il faut contourner tout en conservant la précision.
    Il faut également savoir que l'on peut manipuler des dates dans SQL Server à l'aide de flottants.

    Ce qui nous amène à ceci : SELECT DATEDIFF(day, '00010101', '19000101') nous retourne le nombre jours écoulés entre la naissance de Jesus (was a Punk) et le 1er Janvier 1900.
    Cela retourne 693595.

    Ensuite il nous faut savoir combien de se trouvent dans un jour, ce qu'on l'on trouve en écrivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(24 AS bigint) * 60 * 60 * POWER(10,7)
    Et qui retourne 864.000.000.000.

    On en vient enfin à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DECLARE @t bigint = 634138925370000000
    SELECT CAST(@t / 864000000000.0 - 693595.0 AS DATETIME)
    Qui retourne : 2010-07-05 02:08:57.000

    Est-ce que vous avez le moyen de savoir si cela est correct ?
    J'ai transformé les autres valeurs que vous donnez et cela me semble cohérent.

    @++

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Par défaut
    Bonjour et merci à toi elsuket,

    j'ai utilisé une partie de tes recherches pour arriver à ce résultat exemple :

    (((634138925370000000 / 864000000000) - 693595)) - (1460)) * (86400)) - (39600)) = 3413417375,00000143

    Et j'ai remplacer ta fonction AS DATETIME par une fonction de labview qui converti également en TIMESTAMP

    J'obtiens ceci : 2010/07/05 02:08:57,000

    A vrai dire c'est plutot la partie 2010/07/05 02:08:57,000 à transformer en 3413417375,00000143 qui me pose problème

    comme puis-je faire le chemin inverse ?

    2010/07/05 02:08:57,000 transformé en 634138925370000000 ??

    Si vous avez des idées je suis preneur et je ne souhaite pas avoir recourt à des fonctions ou procédures .... juste des calculs .... merci d'avance je continue de chercher !

Discussions similaires

  1. convertion de epoch time à date
    Par adel25 dans le forum C++
    Réponses: 4
    Dernier message: 22/02/2009, 11h18
  2. Convertion de String en Date("ddMMyy")
    Par Saten dans le forum C#
    Réponses: 12
    Dernier message: 23/10/2008, 15h04
  3. hql: convertion de string en date
    Par osoumayaj dans le forum Hibernate
    Réponses: 3
    Dernier message: 04/01/2007, 13h17
  4. [Oracle 10g] pb de convertion de VarChar en Date
    Par mjolymelot dans le forum Oracle
    Réponses: 3
    Dernier message: 24/06/2006, 10h30
  5. Réponses: 15
    Dernier message: 16/09/2005, 17h43

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