Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2011, 18h42   #1
Membre Expert
 
Inscription : octobre 2007
Messages : 3 937
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 937
Points : 1 905
Points : 1 905
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 :
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 ?
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 18h57   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 19h05   #3
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Cet article cite les principaux format prédéfinis pour les datetime:
http://baptiste-wicht.developpez.com...rver/datetime/
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 23h12   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

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

Code SQL :
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
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2011, 23h32   #5
Membre Expert
 
Inscription : octobre 2007
Messages : 3 937
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 937
Points : 1 905
Points : 1 905
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
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 06h48   #6
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Bonjour,

Il "suffit" d'écrire :

Code :
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 :
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 :
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 :
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 :
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

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 18/03/2011, 07h27   #7
Membre Expert
 
Inscription : octobre 2007
Messages : 3 937
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 3 937
Points : 1 905
Points : 1 905
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
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 08h56   #8
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 667
Points : 8 715
Points : 8 715
Je te l'accorde pour le LEFT, mais pas pour le CONVERT

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h35.


 
 
 
 
Partenaires

Hébergement Web