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 :

[SQL Server 2005] Converstion A-A-A-A-SS en A-A-A-A-MM


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Points : 108
    Points
    108
    Par défaut [SQL Server 2005] Converstion A-A-A-A-SS en A-A-A-A-MM
    Bonjour à tous

    J'ai un problème qui m'embête depuis quelques jors. En effet je suis sous SQL serveur 2005 et j'aimerais convertir un champ AAAASS (Année et semaine) en AAAAMM(Année et mois).

    Exemple Aujourdh'ui nous sommes la semaine 9 de l'année 03 Mars 2011.

    Donc dans ma table j'ai 201109 et je voudrais avoir 201103

    Merci d'avance

  2. #2
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Je ne comprendrai jamais pourquoi des gens stockent des dates ou des parties de dates dans des colonnes dont le type n'est pas un un de ceux proposés par SQL Server pour les dates...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE	dbo.maTable
    SET	maColonne_AAAASS = LEFT(maColonne_AAAASS, 4)
    				+ CASE LEN(CAST(MONTH(DATEADD(week, CAST(RIGHT(maColonne_AAAASS, 2) AS int), CAST(LEFT(maColonne_AAAASS, 4) + '0101' AS datetime))) AS varchar(2)))
    					WHEN 1 THEN '0' + CAST(MONTH(DATEADD(week, CAST(RIGHT(maColonne_AAAASS, 2) AS int), CAST(LEFT(maColonne_AAAASS, 4) + '0101' AS datetime))) AS varchar(2))
    					ELSE CAST(MONTH(DATEADD(week, CAST(RIGHT(maColonne_AAAASS, 2) AS int), CAST(LEFT(maColonne_AAAASS, 4) + '0101' AS datetime))) AS varchar(2))
    				END
    Si vous voulez faire quelque chose d'un peu plus futé et surtout de plus fonctionnel, voyez cet article

    @++

  3. #3
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour

    Citation Envoyé par foxrol Voir le message
    Exemple Aujourdh'ui nous sommes la semaine 9 de l'année 03 Mars 2011.

    Donc dans ma table j'ai 201109 et je voudrais avoir 201103

    Merci d'avance
    ...et un autre exemple :
    dans 4 semaines et un jour, nous seront la semaine 13 de l'année, le 1er avril 2011
    Donc dans votre table, vous aurez 201113.
    Voudrez vous :
    201103
    ou
    201104
    ???

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour



    ...et un autre exemple :
    dans 4 semaines et un jour, nous seront la semaine 13 de l'année, le 1er avril 2011
    Donc dans votre table, vous aurez 201113.
    Voudrez vous :
    201103
    ou
    201104
    ???
    Bonjour aieeeuuuuu,

    En fait je veux les deux car si une semaine chevauche entre deux mois alors il y a aura dupplication des données. On aura dans ma table:

    toto titi 201113
    tutu tete 201114


    Merci

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Pareillement une semaine peut être à cheval sur deux années, et je n'ai pas envie d'écrire le code pour trouver le premier jour de la première semaine de l'année et faire tout ce qui s'ensuit pour vous fournir le code alors que vous ne faites visiblement pas au moins semblant de chercher, par exemple en donnant ce à quoi vous êtes arrivé.

    Vous noterez au passage que toute valeur stockée dans une base de données doit être atomique.
    Comme ce n'est pas votre cas, votre modèle de base de données ne respecte pas la première forme normale, donc il est faux.

    Bon courage avec ce type de stockage de "valeurs" ...

    @++

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 221
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Pareillement une semaine peut être à cheval sur deux années, et je n'ai pas envie d'écrire le code pour trouver le premier jour de la première semaine de l'année et faire tout ce qui s'ensuit pour vous fournir le code alors que vous ne faites visiblement pas au moins semblant de chercher, par exemple en donnant ce à quoi vous êtes arrivé.

    Vous noterez au passage que toute valeur stockée dans une base de données doit être atomique.
    Comme ce n'est pas votre cas, votre modèle de base de données ne respecte pas la première forme normale, donc il est faux.

    Bon courage avec ce type de stockage de "valeurs" ...

    @++
    Merci aieeeuuuuu et elsuketpour votre aide.

  7. #7
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    un autre solution, qui prend l'année et le mois pour le premier jour de la semaine (je n'ai pas trop compris ce que tu voulais au final pour les cas des semaines "à cheval"...)

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    DECLARE @a VARCHAR(6) = '201109' 
     
    SELECT CONVERT( 
    	VARCHAR(6), 
    	DATEADD(
    		WEEK, 
    		CAST(RIGHT(@a, 2) AS INT), 
    		LEFT(@a,4)
    	)
    	, 112
    ) AS AAAAMM
     
    --AAAAMM
    --------
    --201103

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

Discussions similaires

  1. [Installation]SQL Server 2005 Express Edition sur XP home
    Par Médiat dans le forum MS SQL Server
    Réponses: 15
    Dernier message: 06/08/2005, 18h22

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