[SQL Server] Format de date DD/MM/YYYY ..comment ?.

Format de date DD/MM/YYYY ..comment ?. [SQL Server] - SQL/NoSQL - Programmation

Marsh Posté le 06-01-2005 à 09:54:20    

Hello tlm
 
Une ptite question concernant les formats de date :
 
voilà j'aimerai obtenir une date sous la forme JJ/MM/AAAA SANS l'heure derriere.
 
J'ai bien une solution mais j'aimerai éviter de la mettre en oeuvre (en gros réaliser une fonction SQL qui réalise la conversion, mais elle est lourde)
 
DATEPART et DATENAME ne vont pas du tout, pareil pour MONTH et DAY qui retourne par exemple pour le 8 février 2005 (en fesant des cast et tout)
8/2/2005 => alors que je veux 08/02/2005
 
j'explore le MSDN SQL, mais je ne trouve pas de fonction basique réalisant ce format
 
merci de votre aide


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 06-01-2005 à 09:54:20   

Reply

Marsh Posté le 06-01-2005 à 09:59:07    

C'est exprès que tu trouves pas ?
 
C'est chiant à la fin.
SQL Server est livré avec une série de documents CHM et COL qui sont regroupés dans le raccourcis "Documentation en ligne", c'est pas fait pour les chiens de tasmanie. Ca fait quand même 36 Mo compressé, soit un ouvrage plus gros que ce qui ne sera jamais édité en librairie sur le SQL.
 

Citation :


 
 Référence de Transact-SQL  
 
 
CAST et CONVERT
Convertit explicitement une expression d'un type de données en une expression d'un type de données différent. CAST et CONVERT offrent la même fonctionnalité.
 
Syntaxe
Utilisation de CAST :
 
CAST ( expression AS data_type )  
 
Utilisation de CONVERT :
 
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
 
Arguments
expression
 
Toute expression Microsoft® SQL Server™ valide. Pour plus d'informations, voir Expressions.  
 
data_type
 
Type de données cible, fourni par le système, y compris bigint et sql_variant. Les types de données définis par l'utilisateur ne sont pas autorisés. Pour plus d'informations sur les différents types de données, voir Types de données.  
 
length
 
Paramètre facultatif pour les types de données nchar, nvarchar, char, varchar, binary et varbinary.  
 
style
 
Style de format date utilisé pour convertir les données de type datetime ou smalldatetime en données de type caractère (nchar, nvarchar, char, varchar, nchar ou nvarchar), ou celui du format de chaîne lorsque des données de type float, real, money ou smallmoney sont converties en données de type caractère (nchar, nvarchar, char, varchar, nchar ou nvarchar).
 
SQL Server prend en charge le format date en style arabe, à l'aide de l'algorithme Kuwaiti.
 
Dans le tableau ci-après, les deux colonnes de gauche représentent les valeurs style définies pour la conversion de données de type datetime ou smalldatetime en données de type caractère. Ajoutez 100 à une valeur style pour obtenir une année à quatre chiffres, incluant le siècle (yyyy).
 
Sans siècle (yy) Avec siècle (yyyy)  
Standard  
Entrée/Sortie**  
- 0 ou 100 (*)  Par défaut mon dd yyyy hh:miAM (or PM)  
1 101 USA mm/dd/yy  
2 102 ANSI yy.mm.dd  
3 103 Anglais/Français dd/mm/yy  
4 104 Allemand dd.mm.yy  
5 105 Italien dd-mm-yy  
6 106 - dd mon yy  
7 107 - Mon dd, yy  
8 108 - hh:mm:ss  
- 9 ou 109 (*)  Valeur par défaut + millièmes de secondes mon dd yyyy hh:mi:ss:mmmAM (or PM)  
10 110 USA mm-dd-yy  
11 111 Japon yy/mm/dd  
12 112 ISO yymmdd  
- 13 ou 113 (*)  Valeur par défaut Europe + millièmes de secondes dd mon yyyy hh:mm:ss:mmm(24h)  
14 114 - hh:mi:ss:mmm(24h)  
- 20 ou 120 (*)  ODBC canonique yyyy-mm-dd hh:mi:ss(24h)  
- 21 ou 121 (*)  ODBC canonique (avec millièmes de secondes) yyyy-mm-dd hh:mi:ss.mmm(24h)  
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm(no spaces)  
- 130* Kuwaiti dd mon yyyy hh:mi:ss:mmmAM  
- 131* Kuwaiti dd/mm/yy hh:mi:ss:mmmAM  
 
 
*    Les valeurs par défaut (style 0 ou 100, 9 ou 109, 13 ou 113, 20 ou 120 et 21 ou 121) renvoient toujours le siècle (yyyy).
** Entrée lors de la conversion en données de type datetime ; sortie lors de la conversion en données de type caractère.
*** Conçue pour le langage XML. Pour la conversion de données datetime ou smalldatetime en données character, le format de sortie est celui décrit dans le tableau. Pour la conversion de données float, money ou smallmoney en données character, la sortie est équivalente au style 2. Pour la conversion de données real en données character, la sortie est équivalente au style 1.
 
 
 
Important  Par défaut, SQL Server interprète les années à deux chiffres par rapport à l'année de coupure 2049. C'est-à-dire que l'année 49 est interprétée comme 2049 et l'année 50 comme 1950. De nombreuses applications clientes, comme celles qui se basent sur les objets OLE Automation, utilisent l'année de coupure 2030. SQL Server dispose d'une option de configuration (two digit year cutoff) qui permet de modifier l'année de coupure utilisée par SQL Server et garantit ainsi le traitement cohérent des dates. La manière la plus sûre, cependant, consiste à spécifier les années à l'aide de quatre chiffres.
 
 
Lorsque vous convertissez des données de type smalldatetime en données de type caractère, les styles comportant les secondes ou les millièmes de secondes affichent des zéros à ces positions. Si vous convertissez des données de type datetime ou smalldatetime, vous pouvez supprimer les parties non requises de la date en spécifiant la longueur de type de données char ou varchar appropriée.
 
Ce tableau illustre les valeurs style utilisées pour la conversion de données de type float ou real en données de type caractère.
 
Valeur Sortie  
0 (valeur par défaut) Six chiffres maximum. À utiliser pour la notation scientifique si nécessaire.  
1 Toujours huit chiffres. À utiliser obligatoirement pour la notation scientifique.  
2 Toujours 16 chiffres. À utiliser obligatoirement pour la notation scientifique.  
 
 
Dans le tableau ci-après, la colonne de gauche représente la valeur style utilisée lors de la conversion de données de type money ou smallmoney en données de type caractère.
 
Valeur Sortie  
0 (valeur par défaut) Pas de point tous les trois chiffres à gauche de la virgule décimale, et deux chiffres à droite de celle-ci. Par exemple 4235,98.  
1 Insertion d'un point tous les trois chiffres à gauche de la virgule décimale, et deux chiffres à droite de celle-ci. Par exemple 3.510,92.  
2 Pas de point tous les trois chiffres à gauche de la virgule décimale, et quatre chiffres à droite de celle-ci. Par exemple 4235,9819.  
 
 
Type des valeurs renvoyées
Renvoie la même valeur que data_type 0.
 
Notes
Une conversion implicite est une conversion pour laquelle il n'est pas nécessaire de spécifier les fonctions CAST ou CONVERT. A l'inverse, une conversion explicite requiert que la fonction CAST (CONVERT) soit spécifiée. Le tableau suivant répertorie toutes les conversions de types de données explicites et implicites autorisées pour les types de données SQL Server fournis par le système, y compris bigint et sql_variant.
 
 
 
 
 
Remarque  Les données Unicode utilisent toujours un nombre pair d'octets et vous devez par conséquent faire attention lorsque vous convertissez des données de type binary ou varbinary vers ou à partir des types de données pris en charge par Unicode. Ainsi, la conversion suivante renvoie la valeur hexadécimale 4100 et non pas 41 : SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)
 
 
Les types de données text et image ne prennent pas en charge la conversion automatique de types de données. Vous pouvez convertir explicitement des données de type text en données de type caractère, ainsi que des données de type image en données de type binary ou varbinary, mais la longueur maximale ne doit pas dépasser 8000. Si la conversion effectuée n'est pas autorisée (par exemple, si vous tentez de convertir une expression caractère contenant des lettres en données de type int), SQL Server génère un message d'erreur.
 
Lorsque l'entrée et la sortie de CAST ou CONVERT sont des chaînes de caractères, l'entrée et la sortie présentent les mêmes classement et étiquette de classement. Si l'entrée n'est pas une chaîne de caractères, la sortie présente le classement par défaut de la base de données et une étiquette de classement de contrainte par défaut. Pour plus d'informations, voir Priorité de classement.
 
Pour attribuer un classement différent à la sortie, appliquez la clause COLLATE à l'expression de résultat de la fonction CAST ou CONVERT. Exemple :
 
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
 
Aucune conversion implicite n'est effectuée à partir du type de données sql_variant, mais une conversion implicite vers sql_variant existe.
 
Lors de la conversion d'une expression de type binaire ou caractère (char, nchar, nvarchar, varchar, binary ou varbinary) en une expression d'un type de données différent, les données peuvent être tronquées ou partiellement affichées, ou une erreur peut être renvoyée si le résultat est trop court pour pouvoir être affiché. Une expression convertie en donnée de type char, varchar, nchar, nvarchar, binary et varbinary est tronquée, sauf pour les conversions répertoriées dans le tableau suivant.
 
Du type de données Au type de données Résultat  
int, smallint ou tinyint char *  
  varchar  *  
  nchar E  
  nvarchar E  
money, smallmoney, numeric, decimal, float ou real char E  
  varchar  E  
  nchar E  
  nvarchar E  
 
 
* Expression résultante trop courte pour être affichée.
Erreur E renvoyée parce que l'expression résultante est trop courte pour être affichée.
 
Microsoft SQL Server garantit que seules des conversions bidirectionnelles, qui convertissent d'un type de données à l'autre dans les deux sens, restitueront les mêmes valeurs d'une version à l'autre de l'application. L'exemple suivant illustre une conversion bidirectionnelle :
 
DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))
 
Par exemple, n'essayez pas de construire des valeurs binary puis de les convertir en un type de données appartenant à la catégorie de type de donnée numérique. SQL Server ne peut garantir que le résultat de la conversion de données du type decimal ou numeric en binary sera identique d'une version de SQL Server à l'autre.
 
L'exemple suivant illustre une expression résultante trop petite pour être affichée.
 
USE pubs
SELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))
FROM titles
WHERE type = 'trad_cook'
 
Voici le jeu de résultats obtenu :
 
Title                        
------------------------- --  
Onions, Leeks, and Garlic *  
Fifty Years in Buckingham *  
Sushi, Anyone?            *  
 
(3 row(s) affected)
 
Lorsque les types de données sont convertis avec un nombre de décimales différent, la valeur est tronquée au chiffre le plus précis. Par exemple, le résultat de SELECT CAST(10,6496 AS int) est 10.
 
La valeur est arrondie lors de la conversion de types de données dans lesquels le type cible comporte moins de décimales que le type source. Par exemple, le résultat de CAST (10,3496847 AS money) est 10, 3497 FF.
 
SQL Server renvoie un message d'erreur lorsque des données non numériques char, nchar, varchar ou nvarchar sont converties en int, float, numeric ou decimal. SQL Server renvoie également une erreur lorsqu'une chaîne vide (" " ) est convertie en numeric ou decimal.
 
Utilisation de données de type chaîne binaire
Lorsque des données de type binary ou varbinary sont converties en données de type caractère et qu'un nombre impair de valeurs est spécifié après le x, SQL Server ajoute un 0 (zéro) après le x afin de produire un nombre pair de valeurs.
 
Les données binaires se composent de caractères, de 0 à 9 et de A à F (ou de a à f), regroupés par deux. Les chaînes binaires doivent être précédées de 0x. Par exemple, pour obtenir FF, entrez 0xFF. La valeur maximale est une valeur binaire de 8000 octets, chacun étant FF. Les types de données binary conviennent pour des formats binaires plutôt que pour des données hexadécimales. Les conversions et les calculs portant sur les nombres hexadécimaux stockés sous forme de données binaires peuvent ne pas être fiables.
 
Lors de la définition de la longueur d'un type de données binary, chaque groupe de deux caractères compte comme un seul caractère. Une longueur égale à 10 signifie que 10 groupes de deux caractères seront entrés.
 
Les chaînes binaires vides, représentées par 0x, peuvent être stockées sous forme de données binaires.
 
Exemple
A. Utilisation simultanée de CAST et CONVERT
Chacun des exemples suivants extrait les titres des livres dont le total des ventes de l'année commence par un 3, puis convertit le ytd_sales (cumul annuel des ventes) en char(20).
 
-- Use CAST.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '3%'
GO
 
-- Use CONVERT.
USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
FROM titles
WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
GO
 
Voici le jeu de résultats obtenu pour ces deux requêtes :
 
Title                          ytd_sales    
------------------------------ -----------  
Cooking with Computers: Surrep 3876        
Computer Phobic AND Non-Phobic 375          
Emotional Security: A New Algo 3336        
Onions, Leeks, and Garlic: Coo 375          
 
(4 row(s) affected)
 
B. Utilisation de CAST avec des opérateurs arithmétiques
Cet exemple illustre le calcul effectué sur une colonne unique (intitulée Copies) où le total des ventes de l'année (ytd_sales) est divisé par le prix unitaire d'un livre (price). Le résultat est converti en données de type int après avoir été arrondi au chiffre entier le plus proche.  
 
USE pubs
GO
SELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS 'Copies'
FROM titles
GO
 
Voici le jeu de résultats obtenu :
 
Copies      
------  
205          
324          
6262        
205          
102          
7440        
NULL        
383          
205          
NULL        
17          
187          
16          
204          
418          
18          
1263        
273          
 
(18 row(s) affected)
 
C. Utilisation de CAST pour la concaténation d'expressions
Cet exemple concatène des expressions de type autre que binaire ou caractère à l'aide de la fonction de conversion de type de données CAST.
 
USE pubs
GO
SELECT 'The price is ' + CAST(price AS varchar(12))
FROM titles
WHERE price > 10.00
GO
 
Voici le jeu de résultats obtenu :
 
------------------  
The price is 19.99        
The price is 11.95        
The price is 19.99        
The price is 19.99        
The price is 22.95        
The price is 20.00        
The price is 21.59        
The price is 10.95        
The price is 19.99        
The price is 20.95        
The price is 11.95        
The price is 14.99        
 
(12 row(s) affected)
 
D. Utilisation de CAST pour faciliter la lecture des résultats
L'exemple suivant utilise la fonction CAST dans la liste de sélection pour convertir la colonne title en colonne de type char(50) afin de faciliter la lecture des résultats :
 
USE pubs
GO
SELECT CAST(title AS char(50)), ytd_sales
FROM titles
WHERE type = 'trad_cook'
GO
 
Voici le jeu de résultats obtenu :
 
                                                       ytd_sales
--------------------------------------------------     ---------
Onions, Leeks, and Garlic: Cooking Secrets of the      375
Fifty Years in Buckingham Palace Kitchens              15096
Sushi, Anyone?                                         4095
 
(3 row(s) affected)
 
E. Utilisation de CAST avec la clause LIKE
Dans l'exemple suivant, la colonne ytd_sales, de type int, est convertie en colonne de type char(20) pour pouvoir être utilisée avec la clause LIKE.
 
USE pubs
GO
SELECT title, ytd_sales
FROM titles
WHERE CAST(ytd_sales AS char(20)) LIKE '15%'
   AND type = 'trad_cook'
GO
 
Voici le jeu de résultats obtenu :
 
title                                                        ytd_sales    
------------------------------------------------------------ -----------  
Fifty Years in Buckingham Palace Kitchens                    15096        
 
(1 row(s) affected)
 
 
Voir aussi
 
Conversion de type de données  
 
SELECT
 
Fonctions système
 
©1988-2000 Microsoft Corporation. Tous droits réservés.


Message édité par Arjuna le 06-01-2005 à 10:02:15
Reply

Marsh Posté le 06-01-2005 à 10:06:07    

C'est quand même pas bien compliqué.
 
select convert(char(10), getDate(), 103)
 
T'as dû chercher au moins 2 secondes dans ton frigo pour pas être foutu de trouver ça...


Message édité par Arjuna le 06-01-2005 à 10:06:29
Reply

Marsh Posté le 06-01-2005 à 10:13:30    

Arjuna , mhhh tu réponds gentiment toi ;)
 
effectivement moi jsuis parti sur quelque chose de trop compliqué genre :
 

SELECT  REPLICATE('0',2-LEN(DAY(GETDATE()))) +  CAST(DAY(GETDATE()) as varchar) + '/' +
 REPLICATE('0',2-LEN(MONTH(GETDATE()))) +  CAST(MONTH(GETDATE()) as varchar) + '/' +
 CAST(YEAR(GETDATE()) as varchar)


 
ca marchait mais ca me plaisait pas ...
 
effectivement c'est mes yeux je le reconnais, j'ai mal cherché mais c pas faute d'avoir chercher ... sauf que jpartais sur une fausse piste
 
Etk merci de ton aide (je te signale que sur l'autre post que tu as donné la soluce que tu as donné, je la connaissais déjà ... bienq ue le résultat soit bon, je ne comprend pas la logique de leur fonction DATEFIRST
 
(bon jvais ps le dire trop fort, que jsuis MCP alors huhu la honte pour moi...)


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 06-01-2005 à 10:16:40    

Bon, ça va pour cette fois, circulez :o

Reply

Marsh Posté le 15-02-2012 à 15:51:10    

Bonjour à tous,
 
Me tapez pas ! Je suis un novice, je vous jure, j'essaie de me soigner mais je rame !!
 
J'ai bien lu le post qui semble correspondre à mon besoin mais punaise, je comprends pas tout.
 
Voilà le contexte.
 
J'ai une base en SQL Sever avec plein de champs. Je ne peux pas modifier les champs (contraintes taf), par contre je peux en rajouter autant que je veux au format que je veux.
 
J'ai un champs (que je ne peux pas toucher donc) qui s'appelle DATE_MESURE qui est au format datetime.
Je voudrais créer un nouveau champs qui s'appellerait DATE et qui aurait un format JJ/MM/AAAA
 
J'ai essayé des trucs du genre SELECT CONVERT(CHAR(10),GetDate(),103) mais je vois bien que si jamais je lui parle de DATEMESURE, y a pas de raison qu'il y aille tout seul... oui j'en suis là, je copie des lignes que je ne comprends pas toujours.
 
Sinon, j'utilise SQL Server Management Studio Express.
 
Bon voilà je crois que j'ai tout dit. (j'ai bien encore 2 autres problème mais je vais y aller pas à pas).
 
Si vous aviez une solution, ben je suis preneur...
 
Ronald

Reply

Marsh Posté le 15-02-2012 à 17:47:49    

lol j'ai rien compris à ta demande :D
 
(beau détérage  [:implosion du tibia] )
 
est ça que tu veux faire ?
 
SELECT CONVERT(CHAR(10),[DATE_MESURE],103) FROM [TA_TABLE]


---------------
Galerie Photo (Canon)
Reply

Marsh Posté le 16-02-2012 à 08:44:52    

Une date n'est pas stockée avec un format précis (en fait c'est un float), donc ca ne sert a rien de stocker la date de facon differente.
 
Si il te faut la date avec un format bien spécifique tu formates dans ton appli (tu peux aussi le faire avec certaines options de formatage dans une query mais c'est limité).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed