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

Langage SQL Discussion :

SQL Server : Ajouter une heure fixe à la date du jour ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 20
    Points : 18
    Points
    18
    Par défaut SQL Server : Ajouter une heure fixe à la date du jour ?
    Bonjour,

    La fatigue aidant, ma réflexion ralentit gravement et j'espère un peu d'aide

    Contexte : pour générer un rapport, je souhaite mettre la date du jour (de génération du rapport, qui sera donc variable) mais en fixant l'heure à 16h.
    Le SGBD étant SQL Server, je peux utiliser des commandes SQL Server ou Globales, mais ça élimine MySQL, PostGreSQL ou autres.

    J'ai bien la première partie : récupérer la date courante au format date et non Datetime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CAST(GETDATE() AS DATE)
    Je suppose que je vais devoir utiliser la fonction CONVERT(), mais je ne sais pas la former correctement.

    J'ai tenté cette version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CONVERT(DATETIME, CONCAT(CAST(GETDATE() AS DATE), '16:00:00'))
    Mais le serveur n'est pas d'accord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Msg*241, Niveau*16, État*1, Ligne*1
    Conversion failed when converting date and/or time from character string.
    Je pars du principe que le rapport pourra être généré quasiment à n'importe quelle heure du jour comme de la nuit (on peut programmer avec des valeurs par défaut pour avoir un envoi automatique), donc je ne peux pas par exemple utiliser Dateadd pour ajouter X heures à la date du jour, X serait trop variable.

    Je suis pourtant quasiment certain que la solution est presque sous mes yeux, mais je n'ai pas les bonnes lunettes

    Merci

    Edit : honte à moi, je n'ai pas assez bien utilisé la fonction recherche : https://www.developpez.net/forums/d1...ui-heure-fixe/

    Ce qui pour mon cas donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT cast(floor (cast ( getdate() as float )) + 16.00/24 as datetime )
    Et ça me renvoie la date du jour à 15:59:59:940 (ça devrait aller pour 60ms ).

    Je vais passer le sujet en résolu, si ça peut aider quelqu'un qui n'a pas les yeux en face des trous (désolé pour le doublon )

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2016
    Messages : 858
    Points : 1 644
    Points
    1 644
    Le savoir est une nourriture qui exige des efforts.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Le fait de le caster en tant que Date le met obligatoirement à minuit?
    Honnêtement je pensais que ça tronquait juste l'heure, mais sans définir une heure fixe.

    Je testerai cela dit, ça m'a l'air plus concis (et donc plus rapide).

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2016
    Messages : 858
    Points : 1 644
    Points
    1 644
    Par défaut
    Citation Envoyé par Sylv_62 Voir le message
    Le fait de le caster en tant que Date le met obligatoirement à minuit
    Oups, my bad
    Je n'ai pas testé ma commande. Désolé.

    La commande dateadd ne change pas le type => on est toujours en DATE et non pas en dateTime => pas de partie heure => 00:00

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT dateadd(hour,16,cast(CAST(GETDATE() AS DATE) as datetime))
    Le savoir est une nourriture qui exige des efforts.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2016
    Messages : 858
    Points : 1 644
    Points
    1 644
    Par défaut
    Sinon à partir de SQL2022 il y a DATETRUNC

    https://learn.microsoft.com/fr-fr/sq...ql-server-2016
    Le savoir est une nourriture qui exige des efforts.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2024
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2024
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Michel.Priori Voir le message
    Sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT dateadd(hour,16,CAST(GETDATE() AS DATE))
    Bonjour,

    Après test, ça fonctionne encore mieux. :oui:

    ça affiche bien 16h pile, et non 15:59:59.

    Pour DATETRUNC, étant sur une version plus ancienne de SQL Server, je ne pourrai pas m'en servir. Mais ça pourra être utile à d'autres.

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

Discussions similaires

  1. [SQL-Server] SQL Server: convertir une chaine de caractères en date
    Par Louisa2005 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 16/09/2013, 11h25
  2. [Débutant] Comment ajouter des donnees a une BDD SQL SERVER Via une Page ASP.NET
    Par lyes_djaml dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/09/2011, 18h02
  3. Ajouté une heure et une date
    Par fulletain dans le forum LabVIEW
    Réponses: 2
    Dernier message: 30/05/2011, 11h10
  4. Ajouter une heure à un type date
    Par SuperPat dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/07/2008, 10h35
  5. [SQL Server] Ajouter une image
    Par lepiou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/01/2006, 10h10

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