[SQL - 2005] SELECT tra un range di date

di il
9 risposte

[SQL - 2005] SELECT tra un range di date

Spettabile Forum di iprogrammatori.it mi trovo davanti a un problema cui non riesco ad uscirne.
Ho una tabella di nome Lavoratori formata da campi :
- Id
- Cognome
- Nome
- N_Documento
- Data_Inizio_Lavoro
- Data_Fine_Lavoro

Faccio la SELECT con ricerca per N_Documento con WHERE

SELECT * 
FROM Lavoratori
WHERE N_Documento = '0040'
Restituendomi cosi 3 record con i seguenti dati

Id-----Cognome-----Nome--------N_Documento-----------Data_Inizio_Lavoro--------Data_Fine_Lavoro
3-------Rossi----------Faro----------0040 ---------------01/11/2010 -------------28/12/2011
21 ----Bianco --------Luce----------0040 ---------------29/12/2011 -------------02/12/2012
54-----Verde------- Spento --------0040--------------- 03/12/2012-------------------NULL

La domanda è :

Con quale aggiunta alla query precedente citata posso far si' che mi restituisca il personale cui ha lavorato Dal 01/01/2012 Al 31/12/2012 ?

SELECT * 
FROM Lavoratori
WHERE N_Documento = '0040'   ??aggiunta??
desidero avere il seguente risultato seguente risultato (sempre utilizzando WHERE N_Documento = '0040') :

Id-----Cognome-----Nome--------N_Documento-----------Data_Inizio_Lavoro--------Data_Fine_Lavoro
21 ----Bianco --------Luce----------0040 ---------------29/12/2011 -------------02/12/2012
54-----Verde------- Spento --------0040--------------- 03/12/2012-------------------NULL

Spero di essere stato chiaro
Tx in anticipo ^_^

9 Risposte

  • Re: [SQL - 2005] SELECT tra un range di date

    Ciao prova ad aggiungere nel where la seguente condizione

    and year( Data_Inizio_Lavoro) = 2012

    Fammi sapere...
  • Re: [SQL - 2005] SELECT tra un range di date

    Provero' domani mattina e ti faro' sapere

    Correggimi se sbaglio.
    Osservando la query che mi hai dato, cosi' facendo, SQL mi restituirebbe soltanto un record escludendo quello del signor Verde
    Id-----Cognome-----Nome--------N_Documento--------Data_Inizio_Lavoro------Data_Fine_Lavoro
    54-----Verde------- Spento --------0040--------------- 03/12/2012-----------------NULL

    che ha iniziato i lavori il 03/12/2012 non terminandoli ancora e cosi' rientrerebbe anche lui nel range di date Dal 01/01/2012 Al 31/12/2012
  • Re: [SQL - 2005] SELECT tra un range di date

    Dovrebbe essere questa ( ma ormai sono abituato al 2008)
    
    SELECT Id, Cognome, Nome, N_Documento, Data_Inizio_Lavoro, Data_Fine_Lavoro 
    FROM dbo.Tabe 
    WHERE 
    (
    (
    (N_Documento = '0040') 
    AND 
    (Data_Fine_Lavoro > CONVERT(DATETIME, '2012-01-01 00:00:00', 102)) 
    AND 
    (Data_Inizio_Lavoro < CONVERT(DATETIME, '2013-01-01 00:00:00', 102)) 
    ) 
    OR 
    (
    (N_Documento = '0040') 
    AND 
    (Data_Fine_Lavoro IS NULL) 
    AND 
    (Data_Inizio_Lavoro < CONVERT(DATETIME, '2013-01-01 00:00:00', 102))
    )
    )
    
  • Re: [SQL - 2005] SELECT tra un range di date

    Ciao puoi usare l'operatore between e quindi
    SELECT *
    FROM Lavoratori
    WHERE N_Documento = '0040'
    and Data_Inizio_Lavoro between '2012-01-01' and '2012-12-31'
    se devi selezionare solo quelli che entro il 2012-12-31 hanno cessato il lavoro usa lo stesso operatore anche sul campo Data_Fine_Lavoro

    Un saluto
  • Re: [SQL - 2005] SELECT tra un range di date

    Ciao esattamente...

    La tua richiesta era chiara : Con quale aggiunta alla query precedente citata posso far si' che mi restituisca il personale cui ha lavorato Dal 01/01/2012 Al 31/12/2012 ?

    quindi e' giusto che ti restituisca solo quelli che hanno iniziato nell'anno 2012
  • Re: [SQL - 2005] SELECT tra un range di date

    La condizione and year( Data_Inizio_Lavoro) = 2012 va benissimo se deve fare una query "al volo".
    Se gli serve da mettete in un programma perche domani vorrà cercare su un range di 6 mesi, deve usare una condizione con intervallo.

    winningatrox per cosa ti serve la query?
  • Re: [SQL - 2005] SELECT tra un range di date

    Ciao toki. In realta credo che entrambe le nostre soluzioni siano equivalenti...

    Anche con l'utilizzo del between se dovesse un giorno mutare l'intervallo ad esempio fino al 04-01-2013 dovrebbe riscrivere l'intervallo.

    Limitandoci al quesito da lui posto entrambe le soluzioni vanno bene credo forse che il between potrebbe avere dei problemi se si passa da date scritte in modo anglosassono o meno e forse year supera questo ostacolo, ma non l'ho mai provato sinceramente.
  • Re: [SQL - 2005] SELECT tra un range di date

    Le date nel between, come il valore di N_Documento, do per scontato che siano parametrici se si tratta di una query inserita in un programma per questo ti avevo fatto un appunto prima.
  • Re: [SQL - 2005] SELECT tra un range di date

    Sisi l'appunto l'avevo capito.

    Ho capito anche adesso cosa intendevi dare per scontato

    Vabbe dai allora diamo per scontato che da qualche parte ci sia anche nel programma anno = 2013

    e faremo Year(data) = anno

    In realta pero' non so nemmeno se vi e' un applicativo sotto questo db o se e' un db ad uso proprio e ci interaggisce solo con query... questo magari ce lo potra' dire il creatore del post... Attendiamo tue notizie.
Devi accedere o registrarti per scrivere nel forum
9 risposte