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

Langage SQL Discussion :

[SQL Server 2000] Extraction des trimestres


Sujet :

Langage SQL

  1. #1
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut [SQL Server 2000] Extraction des trimestres
    Bonjour,

    Bon ce doit être idiot mais je n'arrive pas à extraire les trimestres.

    Le champs date est de type DateTime (Ce serait ça le problème).

    Donc j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEPART("q", ChampsDate)
    et j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEPART("t", ChampsDate)
    Et il me réponds
    Invalid parameter 1 specified for datepart
    Cela marche avec tous les autres intervalles...
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Qu'est ce que tu entends par trimestre ?
    C'est le nombre que tu obtiens quand tu divises le numéro de mois par 3 ?
    (bon, faut quand même prendre la partie entière supérieure...)

    (Si oui, la réponse est donnée )

  3. #3
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    Salut chose des abysses

    Essaye...
    +++

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    C'est que je pensais qu'il faisait ça tout seul, d'après les tutoriels cela semblait possible.

    J'avais bien vu les possibilités pour les semestre en ajoutant des calculs mais bon.

    Je vais essayer le CASE, ça n'est pas très beau mais au moins je suis sur que ça fonctionnera, merci...
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Salut elbj, nouvelle créature des abyss,

    Déjà merci à pacmann pour sa réponse.

    Et bravo elbj, comme quoi c'est bien ce que je disais c'est un truc idiot, j'ai même pas pensé à essayer sans les simples et doubles quotes...(Sinon le CASE fonctionne aussi mais c'est barbar)

    LA HONTE

    THANKS
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  6. #6
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    De rien...

    Il me semble que, dans la mesure du possible, il faut éviter les CASE dans une requête car ça rompt le traitement ensembliste pour forcer un traitement séquentiel.

    Je viens peut-être de dire une grosse bêtise, peut-être que si un spécialiste passe par là...

    +++

  7. #7
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Je ne suis pas un spécialiste, mais il me semble que le case doit être évité lorsqu'il est possible de séparer les cas dans le WHERE.

    Par exemple, la grosse caricature :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT case when id > 1000 then 'a' else 'b' end
    FROM T
    (avec id indexée)
    => c'est très séquentiel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT 'a'
    FROM T
    WHERE id >1000
    UNION ALL
    SELECT 'b'
    FROM T 
    WHERE id <=1000
    => là, c'est plus rapide. Normal

    Par contre, si tu dois appliquer une fonction, le traitement sera séquentiel qu'il s'agisse d'un case, ou d'opérations en tous genres...

    EDIT :
    Bon, après, il y a peut être une différence légère de vitesse d'exécution entre certaines instruction et d'autres.
    Encore une fois, une caricature :
    - d'un côté, un bitshift
    - de l'autre, des recherches sur chaînes de caractères imbriquées avec des remplacements et des comparaisons, finissant par des casts...

  8. #8
    Membre chevronné Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Par défaut
    Bonsoir

    Il est clair que l'utilisation de fonctions dans les requêtes casse l'approche ensembliste de celles-ci. A éviter autant que faire se peut.

    Cordialement

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 036
    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 036
    Billets dans le blog
    6
    Par défaut
    Pour le CASE, tout dépend du moteur de bases de données.

    Si CASE valué avec en expression une seule colonne, alors il est optimisable (et systématiquement optimisé par SQL Server par exemple).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT ...
    FROM  ...
     
    WHERE  CASE colonne1 
                  WHEN 1 THEN 'toto' 
                  WHEN 2 THEN 'titi' 
                  WHEN 3 THEN 'tata' 
                  ELSE 'zut'
               END = colonne2
    Si CASE généralisé, alors il est aussi optimisable si le prédicat est "sargable".
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT ...
    FROM  ...
     
    WHERE  CASE  
                  WHEN colonne1 = 1 THEN 'toto' 
                  WHEN colonne2 BETWEEN 5 AND 999 THEN 'titi' 
                  WHEN LOG(SIN(colonne16)) = .01253 THEN 'tata' 
                  ELSE 'zut'
               END = colonne2
    Peut être optimisé pour les colonnes colonne1 et colonne2 puisque c'est dans l'ordre de lecture que se fait l'application du CASE. Autrement dit il est important que des expressions "sargable" figurent dans les premières branches du CASE.

    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/ * * * * *

  10. #10
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Merci,

    Par contre j'ai du faire une bêtise car je l'ai utilisé dans le SELECT. Cela fait-il une grosse différence de traitement.

    Je ne suis pas un spécialiste, mais il me semble que le case doit être évité lorsqu'il est possible de séparer les cas dans le WHERE.
    Est-ce une bonne solution d'utiliser le CASE en fait ou y'a-t-il des moyens de l'éviter ?
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



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

Discussions similaires

  1. SQL Server 2000 importer des données
    Par ensiaste92 dans le forum Développement
    Réponses: 0
    Dernier message: 07/07/2014, 11h52
  2. [SQL Server 2000] Liste des jours d'un mois donné
    Par luimême dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/04/2008, 11h27
  3. Réponses: 5
    Dernier message: 30/05/2007, 18h08
  4. Réponses: 9
    Dernier message: 20/03/2007, 19h56
  5. [SQL Server 2000] Extraction dans une chaine de caracteres
    Par KOFJCH dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/10/2006, 09h28

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