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

Développement SQL Server Discussion :

Requête SQL sur date


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 313
    Par défaut Requête SQL sur date
    Bonjour
    je rame sur une requête et j'aurais besoin de vos lumières svp.
    Au fait j'ai une table production avec les champs et notamment un champ date, je souhaite extraire toutes les données en faisant un filtre sur la date, en claire toutes les lignes de moins de 4 mois par rapport à la date du jour
    j'ai essayé avec between mais ca marche pas.
    merci bcp

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pourrais-tu fournir ce que tu as fait, parce que là, ça va être difficile de deviner pourquoi tu n'y arrives pas. Il y a une charte de postage qui est dans ma signature qui pourrait t'aider à avoir des réponses constructives...

  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 009
    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 009
    Billets dans le blog
    6
    Par défaut
    Postez votre requête !

    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 très actif Avatar de Bernardos
    Homme Profil pro
    Consultant Senior dba sql server & Microsoft Business Intelligence
    Inscrit en
    Avril 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant Senior dba sql server & Microsoft Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 333
    Par défaut
    et Le script ddl de création de cette fameuse table.
    Cordialement,

  5. #5
    Membre éclairé
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 313
    Par défaut Merci
    Merci pour vos retours, désolé.
    pour la partie requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from Production where date < 400  and date <  SYSDATETIME ()
    select * from Production where date between  SYSDATETIME () and SYSDATETIME ()
    pour la partie Creation Table :
    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    CREATE TABLE [dbo].[Production] (
        [SERIALNUMBER]          CHAR (17)      NULL,
        [PARTNUMBER]            CHAR (12)      NULL,
        [DATE]                  DATETIME       NULL,
        [HEURE]                 DATETIME       NULL,
        [TEST_STATION]          CHAR (50)      NULL,
        [TEST_SOFTWARE_VERSION] CHAR (16)      NULL,
        [DATABASE_VERSION]      CHAR (3)       NULL,
        [SERIALNUMBER_CI]       CHAR (17)      NULL,
        [SOFTWARE_VERSION]      CHAR (40)      NULL,
        [OPERATOR]              CHAR (16)      NULL,
        [DIE_NUMBER]            CHAR (16)      NULL,
        [OF_NUMBER]             CHAR (12)      NULL,
        [OPTION1]               NVARCHAR (50)  NULL,
        [OPTION2]               NVARCHAR (50)  NULL,
        [OPTION3]               NVARCHAR (50)  NULL,
        [OPTION4]               NVARCHAR (50)  NULL,
        [OPTION5]               NVARCHAR (50)  NULL,
        [OPTION6]               NVARCHAR (50)  NULL,
        [OPTION7]               NVARCHAR (50)  NULL,
        [OPTION8]               NVARCHAR (50)  NULL,
        [OPTION9]               NVARCHAR (50)  NULL,
        [OPTION10]              NVARCHAR (50)  NULL,
        [MAC_ADDRESS1]          CHAR (12)      NULL,
        [MAC_ADDRESS2]          CHAR (12)      NULL,
        [AUTOID]                INT            IDENTITY (1, 1) NOT NULL,
        [DATABASE]              NVARCHAR (200) NULL
    );
    Merci a vous, le champ qui m’intéresse est le Champs DATE

    Merci

  6. #6
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Pour commencer, le modèle de la table est bancale.
    Pourquoi ne pas avoir géré une table d'option et un association entre les options et la production.. chacune de vos production n'aura pas forcément les 10 options. Certaines de vos requêtes vont être particulièrement sales à gérer les différentes combinaisons d'options, pleines de OR, pleines de case when et d'autres fonctions coûteuses en termes de performances.


    Pour la première requête, que représente ce 400? vous interrogez une date qui possède un format particulier avec un numérique.. pensez vous que le SGBD va comprendre le besoin?

    Ensuite, pour la 2ème requête, vous faites un between sysdate() et sysdate(). Ce qui veux dire que vous n'avez pas d'intervalle de recherche. Il ne peut donc pas y avoir de retour possible.


    Je ne parle pas des typages de champs, je ne sais pas ce que vous stockez, mais je pense qu'il y a moyen de faire mieux de ce côté aussi.

    Cordialement,
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 138
    Par défaut
    Par ailleurs, c'est une très mauvaise idée d'utiliser des mots réservé du langage (tel que DATE) pour nommer un objet de a base de données.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 009
    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 009
    Billets dans le blog
    6
    Par défaut
    En dehors du modèle totalement catastrophique (une SGBDR n'est pas un tableur et une table n'est ps une feuille excel...) vos requêtes n'ont rien avoir avec une quelconque logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Production where date < 400  and date <  SYSDATETIME ()
    Une date n'étant pas un nombre et vice versa ce que vous avez écrit dans ce membre de prédicat date < 400 n'a aucun sens !!!
    Vous devez comparer une date à une autre date !
    Si vous voulez toutes les informations depuis les 4 dernier mois, il faut utiliser la date courante et y retirer 4 mois, ce qui se fait comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEADD(month, -4, CURRENT_TIMESTAMP)
    Et au final votre requête est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Production where date BETWEEN DATEADD(month, -4, CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Production where date between  SYSDATETIME () and SYSDATETIME ()
    Celle-ci est assez absurde car elle dit : ttrouve moi tous les machins dont la date est entre la date courante et la date courante...
    Franchement pas terrible et j'ignore ce que vous voulez obtenir avec un tel non sens !

    Formez vous au langage sql... Mon site comme mon bouquin vous serait sans doute d'une grande utilité :
    Nom : Couverture SQL Synthex 4e ed - 500.jpg
Affichages : 2960
Taille : 77,8 Ko

    Il y aurait enfin beaucoup de choses à dire sur les types utilisés. Par exemple qu'une adresse MAC c'est du binaire en non du CHAR, donc BINARY et non CHAR(12), qu'un nom de base, comme tout identifiant SQL c'est de type sysname, qu'une date exige le type DATE et non DATETIME qui d'ailleurs est obsolète depuis la version 2008 de SQL Server et qu'une heure c'est le type TIME !

    Formez vous aussi à Sql Server et pour cela notre livre peut aussi vous y aider :
    Nom : Couverture livre SQL server Eyrolles.jpg
Affichages : 2965
Taille : 105,0 Ko

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

  9. #9
    Membre très actif Avatar de Bernardos
    Homme Profil pro
    Consultant Senior dba sql server & Microsoft Business Intelligence
    Inscrit en
    Avril 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant Senior dba sql server & Microsoft Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 333
    Par défaut
    Pour commencer, le modèle de la table est bancale.
    heuh, t'es gentil toi. moi je dis beurk! c'est vraiment très mauvais!
    entre le datetime qui doit être un datetime2, les nvarchar(50), le champ date qui ne devrait pas s'appeler ainsi, les options et les macadress qui devraient être sorties de la table...enfin bref, ca ressemble à rien!


    Ceci dit je vais répondre à la simple question qui était comment obtenir toutes les lignes dans les 4 mois précédents.
    j'ai tout de même une question c'est quoi 4 mois? Imagine on est le 12/10/2016?
    • du 12/06/2016 à aujourd'hui
    • du 01/06/2016 à aujourd'hui
    • du 01/06/2016 au 31/09/2016
    • autre :


    voici une solution très simple
    Select * from Production where [date] > dateadd(month,-4,sysdatetime())
    Cordialement,

Discussions similaires

  1. Requête SQL sur champ DATE
    Par SIADIDL dans le forum SQL
    Réponses: 10
    Dernier message: 13/05/2014, 09h28
  2. Une requête SQL sur 2 Dates
    Par souminet dans le forum Bases de données
    Réponses: 5
    Dernier message: 14/05/2008, 21h29
  3. Requête SQL sur une base Access, where sur un champ date
    Par digital prophecy dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/05/2008, 17h47
  4. [CR ?] requête SQL sur une date
    Par czezko dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 23/04/2008, 11h25
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 17h26

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