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

MS SQL Server Discussion :

Décalage Unix timestamp conversion


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 305
    Points : 115
    Points
    115
    Par défaut Décalage Unix timestamp conversion
    Bonjour à tous,

    j'essaie de récupérer des données sur une base sql server distante. Parmi les données une colonne date unix timestamp.

    J'essaie de convertir avec la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     	 DATEADD(SECOND, ma_date, '19700101') as ma_date,
    Mais mon problème j'ai un décalage de 2h, je peux rajouter deux heures mais je pour le mois d'octobre faut que je le modifier encore une fois; et étant donné que c'est des données critique je ne veux pas m’amuser à changer la requête à chaque fois.

    Je vous remercie de votre aide

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 862
    Points : 53 015
    Points
    53 015
    Billets dans le blog
    6
    Par défaut
    Il suffit de jouer sur le bon fuseau horaire ! Convertissez votre données en DATETIMEOFFSET avant de l'extraire.

    A +

  3. #3
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Je pense que vous vous êtes trompé d'opérateur SQL.

    Essayez plutôt un CAST() ou un CONVERT()

    La votre script va essayer de rajouter des secondes sur une date fixe '19700101' en fonction de votre date (comparer secondes et une date est comme comparer des vaches et des cocotiers)

  4. #4
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 305
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Il suffit de jouer sur le bon fuseau horaire ! Convertissez votre données en DATETIMEOFFSET avant de l'extraire.

    A +
    Je ne vois pas comment ? c'est dans mon select que je fais cela ?

  5. #5
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 305
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par evanbarke Voir le message
    Je pense que vous vous êtes trompé d'opérateur SQL.

    Essayez plutôt un CAST() ou un CONVERT()

    La votre script va essayer de rajouter des secondes sur une date fixe '19700101' en fonction de votre date (comparer secondes et une date est comme comparer des vaches et des cocotiers)
    un CAST ou CONVERT ne marche pas

  6. #6
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Vous pouvez donner un exemple de votre date en varchar svp?

  7. #7
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 305
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par evanbarke Voir le message
    Vous pouvez donner un exemple de votre date en varchar svp?
    voila 1373755433

  8. #8
    Membre actif
    Avatar de SQL_EVAN
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2011
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 161
    Points : 245
    Points
    245
    Par défaut
    Ah je suis désolé, je n'avais rien compris

    En effet, l'approche utilisée dans SQL Server est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATEADD(s, 1373755433, '1970-01-01 00:00:00')
    Pour le décalage de 2 heures c'est difficile à dire d'où elles viennent... Si possible ce sera mieux de stocker les données sous un autre format/type de données plus compatible avec SQL Server

  9. #9
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 305
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par evanbarke Voir le message
    Ah je suis désolé, je n'avais rien compris

    En effet, l'approche utilisée dans SQL Server est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATEADD(s, 1373755433, '1970-01-01 00:00:00')
    Pour le décalage de 2 heures c'est difficile à dire d'où elles viennent... Si possible ce sera mieux de stocker les données sous un autre format/type de données plus compatible avec SQL Server
    Malheureusement je n'ai pas la main

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Points : 586
    Points
    586
    Par défaut
    Le forma de date semble être du Time_t qui est un nombre de secondes ecoulé depuis le 01.01.1970, qui est systématiquement en GMT 0 et qui ne tiens pas compte de l'heure d'été ou d'hivers...

    Si ça aide

  11. #11
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 305
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par Donpi Voir le message
    Le forma de date semble être du Time_t qui est un nombre de secondes ecoulé depuis le 01.01.1970, qui est systématiquement en GMT 0 et qui ne tiens pas compte de l'heure d'été ou d'hivers...

    Si ça aide
    Je sais qu'il est en timestamp et qu'il y a pas de décalage horaire, maintenant je cherche une solution de contourné se problème

  12. #12
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select dateadd( second , ( timestamp / 1000 ) - datediff ( second, GETDATE() , GETUTCDATE() ) , '1970-01-01') tps

  13. #13
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 305
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select dateadd( second , ( timestamp / 1000 ) - datediff ( second, GETDATE() , GETUTCDATE() ) , '1970-01-01') tps
    SELECT dateadd( second , ( 1373755433 / 1000 ) - datediff ( second, GETDATE() , GETUTCDATE() ) , '1970-01-01') tps

    sa me donne 1970-01-16 et c'est pas du tout le résultat attendu, est ce que j'ai bien utiliser votre requête ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stade13 Voir le message
    Ça me donne 1970-01-16 et c'est pas du tout le résultat attendu, est ce que j'ai bien utiliser votre requête ?
    C'est sans doute la faute du pseudo timestamp de ma table de test.
    Essaie en retirant le / 1000, ça parait plus crédible


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT dateadd( second , ( 1373755433 ) - datediff ( second, GETDATE() , GETUTCDATE() ) , '1970-01-01') tps
     
    tps
    -----------------------
    2013-07-13 18:43:53.000
     
    (1 row(s) affected)

  15. #15
    Membre régulier
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2011
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 305
    Points : 115
    Points
    115
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    C'est sans doute la faute du pseudo timestamp de ma table de test.
    Essaie en retirant le / 1000, ça parait plus crédible


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT dateadd( second , ( 1373755433 ) - datediff ( second, GETDATE() , GETUTCDATE() ) , '1970-01-01') tps
     
    tps
    -----------------------
    2013-07-13 18:43:53.000
     
    (1 row(s) affected)

    Merci sauf que pour moi le résultat c'est 2013-07-14 00:43:53 et c'est exactement ce que je cherchai

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stade13 Voir le message
    Merci sauf que pour moi le résultat c'est 2013-07-14 00:43:53 et c'est exactement ce que je cherchai
    C'est justement le décalage horaire entre le Québec et la France !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Date, timestamp, conversions et arrondis
    Par koktel_dfr dans le forum SQL
    Réponses: 5
    Dernier message: 09/03/2010, 10h07
  2. insérer unix timestamp dans table
    Par zyongh dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/11/2008, 12h35
  3. Utilisation du Unix TimeStamp
    Par toychief dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 05/02/2008, 22h05
  4. [TIMESTAMP] conversion float -> timestamp
    Par yridwenn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2006, 12h10
  5. Soustraire 2 dates en unix timestamp
    Par MaKKrO dans le forum C
    Réponses: 7
    Dernier message: 13/04/2006, 08h29

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