Query Date

di il
8 risposte

Query Date

Buongiorno, grazie mille per avermi accettato.
Ho un piccolo problema SQL:
Tabella con tre colonne: matricole, data di assunzione e data di dimissioni. Devo trovare tutte le matricole che siano comprese tra 01/01/2021 e 31/01/2021...semplice direte eh? Eh no. Semplicemente perché il database è stato creato in modo che imponesse la data 31/12/3000 a chi fosse attualmente in forze e, quindi, nella mia ricerca devo includere non solo le matricole di cui sopra ma anche tutte quelle che abbiano come data la 31/12/3000. Guardate...nn è una banalità perché con la where imponendo le and, or...e compagnia cantante...una esclude l'altra e la tabella risultante manca sempre di dati o ne ha di più. Sarò stanco...ok...forse qualcuno più lucido può accendermi la lampadina? Grazie mille e complimenti per il forum

8 Risposte

  • Re: Query Date

    La butto lì, perché non so se ho capito bene: usando una UNION non funziona?
  • Re: Query Date

    (dataassunzione >='2021-01-01' and dataassunzione<='2021-01-31') or (dataassunzione='3000-12-31')
    è una domanda un po' strana, forsa data dimissione='3000-12-31' per chi avrebbe la data dimissione NULL (cioè inesistente?)
    Puoi comunque usare anche una IF, se proprio devi (chiaramente imponendo una full scan)
  • Re: Query Date

    Ciao e benvenuto/a nel forum!

    Se devi eseguire una select comprese tra due o anche più date puoi usare BETWEEN.
    
    SELECT * FROM tua_tabella WHERE data_assunzione BETWEEN '2021-01-01' AND '2021-01-31'
    
    Ma la data 31/12/3000 è nella colonna assunzione? Non è molto logico... Ho capito male?

    Se fosse così aggiungi un OR data_assunzione='3000-12-31'

    Ciao
  • Re: Query Date

    No, la data del 3000 è nella colonna data_dimissioni. Cmq grazie molte per i suggerimenti...anche io avevo pensato ad una UNION di due tabelle temporanee...ma farò le varie prove suggerite e vi farò sapere. Grazie a tutti!
  • Re: Query Date

    +m2+ ha scritto:


    è una domanda un po' strana, forsa data dimissione='3000-12-31' per chi avrebbe la data dimissione NULL (cioè inesistente?)
    Puoi comunque usare anche una IF, se proprio devi (chiaramente imponendo una full scan)
    Nn c'è mai una NULL: o c'è il range definito in caso di dimissioni o, se sei del ruolo permanente, la data del 3000
  • Re: Query Date

    cali ha scritto:


    Ciao e benvenuto/a nel forum!

    Se devi eseguire una select comprese tra due o anche più date puoi usare BETWEEN.
    
    SELECT * FROM tua_tabella WHERE data_assunzione BETWEEN '2021-01-01' AND '2021-01-31'
    
    Ma la data 31/12/3000 è nella colonna assunzione? Non è molto logico... Ho capito male?

    Se fosse così aggiungi un OR data_assunzione='3000-12-31'

    Ciao
    Between nn posso usarla perché le colonne sono diverse da coinvolgere nel range delle date. Il 3000 è nella colonna dimissioni....è solo un escamotage per definire le persone del ruolo permanente ancora in forze.
  • Re: Query Date

    Nores ha scritto:


    cali ha scritto:


    Ciao e benvenuto/a nel forum!

    Se devi eseguire una select comprese tra due o anche più date puoi usare BETWEEN.
    
    SELECT * FROM tua_tabella WHERE data_assunzione BETWEEN '2021-01-01' AND '2021-01-31'
    
    Ma la data 31/12/3000 è nella colonna assunzione? Non è molto logico... Ho capito male?

    Se fosse così aggiungi un OR data_assunzione='3000-12-31'

    Ciao
    Between nn posso usarla perché le colonne sono diverse da coinvolgere nel range delle date. Il 3000 è nella colonna dimissioni....è solo un escamotage per definire le persone del ruolo permanente ancora in forze.
    Se sono più colonne non puoi utilizzare il between??? Perchè??

    Non è vero.... puoi utilizzarlo con gli operatori OR, AND, parentesi....

    Ciao
  • Re: Query Date

    Urge un esempio con dei dati (anche inventati) perchè, davvero, non si capisce nulla (né di quali colonne tu debba filtrare, né di quali dati ci siano in queste colonne, né qual è il risultato che vuoi avere).
    Inizialmente parli di matricole comprese fra 01/01/2021 e 31/01/2021 (senza specificare in quale dei due campi data si trova questa informazione... ma vabbé, possiamo supporre che sia la data assunzione). Poi parli di 31/12/3000 come data imposta per chi è attualmente in forze (qui noi capiamo che stai parlando della data di dimissioni... e che c'entra con con la data di assunzione di cui stavi parlando prima? Sei saltato di palo in frasca?)
    Cerca di fare chiarezza: posta un esempio dei dati presenti nella tabella (inventali) e dicci quale deve essere il risultato di questa query.
Devi accedere o registrarti per scrivere nel forum
8 risposte