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 :

Formatage DateTime en Sql


Sujet :

MS SQL Server

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Formatage DateTime en Sql
    Bonjour

    En C# il est possible de specifier le format d'affichage d'une date en spécifiant une chaine de formatage

    Exemple
    "yyyy-MM-dd HH:mm" donnera 2011-03-17 18:37

    En googelant un peu pour Sql je trouve des solution beaucoup plus lourdes du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select right('0' + rtrim(month(@d)),2) + '/' + right('0' + rtrim(day(@d)),2) + '/' + rtrim(year(@d)).
    J'ai aussi cherché les mots clef "format datetime" sur le forum mais sans succes

    Dois-je conclure que SQL n'a pas de methode de formatage spécifique pour les dates ?

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    je trouve des solution beaucoup plus lourdes du genre
    Ce n'est pas une solution çà!

    Rappelons que ce n'est pas le rôle d'un SGBD de réaliser la présentation des données...

  3. #3
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Cet article cite les principaux format prédéfinis pour les datetime:
    http://baptiste-wicht.developpez.com...rver/datetime/

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Le code que vous donnez s'ecrit plus simplement comme ceci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT CONVERT(CHAR(10), @d, 101)

    si vous voulez un autre format, choisissez celui qui vous convient dans la doc de CONVERT

    Si vous ne trouvez pas celui qui vous convient... convertissez coté client, ce que d’ailleurs vous devriez faire dans tous les cas

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Aieuuuuu

    Ce que je cherche a faire c'est ceci

    "yyyy-MM-dd HH:mm" pour donner ceci : 2011-03-17 18:37

    Et je voudrais bien convertir de tout coeur du coté client pour echapper aux limites de la syntaxe SQL

    Mais je suis contraint de tout faire en SQL car le but est d'envoyer un mail pas trop mal formaté depuis MS SQL Server et donc sp_Send_DbMail

    Je crois que je vais devoir y aller a la pelle et la truelle

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

    Il "suffit" d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LEFT(CONVERT(varchar(19), GETDATE(), 120), 16)
    Pour obtenir : 2011-03-18 12:37

    Maintenant tu veux peut être l'encapsuler dans une fonction, mais sache que la ré-utilisabilité du code en SQL n'est pas la même que dans un langage fonctionnel.

    Tu peux en faire une fonction scalaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE FUNCTION fn_get_formatted_datetime
    	(@_date_time datetime)
    RETURNS char(16)
    AS
    BEGIN
    	RETURN LEFT(CONVERT(varchar(19),@_date_time, 120), 16)
    END
    Dont l'utilisation est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT	mesColonnes
    	, dbo.fn_get_formatted_datetime(maColonneDateTime)
    FROM	dbo.maTable
    Dans ce cas la fonction sera appelée pour chaque ligne de ton résultat, ce qui fait que les fonctions scalaires sont assez contre-performantes.
    En revanche tu peux l'utiliser pour spécifier une colonne calculée.

    Tu peux aussi en faire une fonction table en ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE FUNCTION fn_get_formatted_datetime
    	(@_date_time datetime)
    RETURNS TABLE
    AS
    RETURN SELECT LEFT(CONVERT(varchar(19), @_date_time, 120), 16) AS formatted_datetime
    Qui s'utilise de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT		T.mesColonnes
    		, D.formatted_datetime
    FROM		dbo.maTable AS T
    CROSS APPLY	dbo.fn_get_formatted_datetime(T.maColoneDateTime) AS D
    Qui te procurera de meilleures performances, mais que tu ne peux pas utiliser pour spécifier une colonne calculée.

    Les deux fonctions sont utilisables dans une vue, et je pense que c'est ce que tu devrais faire pour ton mail

    @++

  7. #7
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Décidement, ton aide est inestimable elsuket

    Bon je comprends l'astuce du Left du mode 120 mais il fallait le voir avec ta benediction pour l'oser sans gène

  8. #8
    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
    Par défaut
    Je te l'accorde pour le LEFT, mais pas pour le CONVERT

    @++

Discussions similaires

  1. Formatage de requêtes SQL
    Par juvamine dans le forum Outils
    Réponses: 1
    Dernier message: 05/04/2012, 11h34
  2. Format Datetime dans SQL Server
    Par amirad dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/03/2009, 14h58
  3. conversion des dates string datetime en sql server 2008
    Par banger dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/12/2008, 10h39
  4. Datetime sous SQL Server : modifier le format de la date ?
    Par Monkey_D.Luffy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/06/2008, 11h35
  5. TADOQuery et DateTime pour SQL
    Par Jabbal'H dans le forum Delphi
    Réponses: 2
    Dernier message: 27/12/2006, 23h23

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