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 :

Format Date + Nombre


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Controle de gestion
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Controle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Par défaut Format Date + Nombre
    Bonjour à tous,

    Tout d'abord je m'excuse, je suis une grande débutante SQL et je me doute que la question que vais poser à probablement déjà été abordée...

    Voila, je dois faire une requête SQL afin de rassembler différentes informations présentes dans différentes tables du système. Ce fichier sera ensuite uploadé par notre société mère..... C'est pourquoi le format et le nombre de caractère nous sont malheureusement imposés.

    Aussi, le format date doit se présenter de la manière suivante: jjmmaaaa mais doit avoir obligatoirement 8 caractères.
    J'ai trouvé la chaine de conversion suivante: CONVERT(VARCHAR, Day(A.[Document Date]))+ CONVERT(VARCHAR, Month(A.[Document Date]))+ CONVERT(VARCHAR, Year(A.[Document Date])). mais malheureusement quand le jours commence par 0, il ne me reporte que 7 caractères.

    Comment puis-je imposer le nombre de caractère??


    De plus, certains champs ont aussi un nombre de caractère imposé mais ce dernier n'est pas le même que ce qui(il y a dans le système. Est-il possible de dire en gros si tel champs à plus de 8 caractères tu prends les 8 premiers, si'il en a moins tu me rajoute un nombre de 0 qui va bien?

    Merci par avance,

    Chlolo5

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Par défaut
    Bonjour,

    Pour répondre à votre besoin voici 2 options, une basée sur votre query et une autre plus directe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select RIGHT('0' + CONVERT(VARCHAR, Day(A.[Document Date])),2) + RIGHT('0' + CONVERT(VARCHAR, Month(A.[Document Date])),2)+  CONVERT(VARCHAR, Year(A.[Document Date]))
     
    select replace(convert(VARCHAR(10), A.[Document Date], 103), '/','')

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    1) la solution la plus simple et la plus rapide :
    REPLACE(CONVERT(VARCHAR(10), CURRENT_TIMESTAMP, 103), '/', '' )

    2) SUBSTRING

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre averti
    Femme Profil pro
    Controle de gestion
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Controle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Par défaut
    Merci à vous...cela à fonctionné pour la date...

  5. #5
    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 : 44
    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,

    De plus, certains champs ont aussi un nombre de caractère imposé mais ce dernier n'est pas le même que ce qu'il y a dans le système. Est-il possible de dire en gros si tel champs à plus de 8 caractères tu prends les 8 premiers, s'il en a moins tu me rajoute un nombre de 0 qui va bien?
    Voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ;WITH
    	CTE (uneChaine) AS
    	(
    		SELECT	'toto'
    		UNION	ALL SELECT 'tototiti'
    		UNION	ALL SELECT 'tototititutu'
    	)
    SELECT	CASE
    		WHEN LEN(uneChaine) > 8 THEN LEFT(uneChaine, 8)
    		WHEN LEN(uneChaine) = 8 THEN uneChaine
    		WHEN LEN(uneChaine) < 8 THEN REPLICATE('0', 8 - LEN(uneChaine)) + uneChaine
    	END
    FROM	CTE
    Il suffit de remplacer l'expression de table commune (CTE) par le nom de la table et uneChaine par la colonne qui va bien.
    S'il s'agit d'un nombre, remplacez uneChaine dans les membres droits des inégalités du CASE par un CAST(uneChaine AS varchar(x)), avec x

    - égale à 3 si c'est une colonne de type tinyint
    - égale à 6 si c'est une colonne de type smallint
    - égale à 10 si c'est une colonne de type int
    - égale à 20 si c'est une colonne de type bigint
    - ou à la brutal : tout mettre en varchar(max) ...

    @++

  6. #6
    Membre averti
    Femme Profil pro
    Controle de gestion
    Inscrit en
    Novembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Controle de gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 19
    Par défaut
    Merci beaucoup elsuket maintenant c'est tout bon!!!

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

Discussions similaires

  1. [XL-2010] Conversion date nombre en format usuel
    Par Tiviia dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/08/2013, 13h33
  2. [AC-2007] comment convertir un nombre format 20120101 en format date
    Par arabi91 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/03/2012, 16h53
  3. Réponses: 0
    Dernier message: 01/10/2010, 11h14
  4. [XL-2003] comment formater un nombre en date
    Par Ohemeg dans le forum Excel
    Réponses: 4
    Dernier message: 12/06/2010, 12h09
  5. Formater avec String.Format un nombre ou une date
    Par bubulemaster dans le forum Débuter
    Réponses: 2
    Dernier message: 29/06/2008, 19h00

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