+ Rispondi al messaggio
Pagina 4 di 4 primaprima ... 234
Visualizzazione dei risultati da 31 a 35 su 35

Estrazione Dati in Range [gg/mm] senza [Anno]

  1. #31
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Max... mi sono perso...!
    ℹ️ Leggi di più su @Alex ...

  2. #32
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Quote Originariamente inviato da @Alex Visualizza il messaggio
    Max... mi sono perso...!
    In sintesi :
    - la soluzione proposta da Willy prevede 2 query distinte
    - la query con periodo nello stesso anno non l'ho provata (ma credo non abbia alcun problema)
    - la query con periodo che scavalca l'anno funziona ma non considera i dati agli estremi della ricerca (ovvero per il periodo 15/12-07/01 per ottenere i dati corretti occorre ricercare per 14/12-08/01)
    - come alternativa alla ricerca effettuata tra i limiti ('MMDD' >= And 'MMDD' <= ) = false io ho utilizzato l'operatore Not between ottenendo gli stessi risultati di cui sopra

    Ho anche provato la tua query Alex, che funziona correttamente (restituisce 24 records per il periodo 15/12-07/01 limitando la ricerca agli anni 2019-2021).

    A livello di prestazioni le varie query si comportano in maniera molto simile (su un set di 5700 records ne vengono estratti 20-24 in 450-480 mS). Si tratta di misure indicative senza la pretesa di un'accuratezza/ripetibilità degne di questi termini.

    Dal punto di vista della scalabilità occorre considerare che l'approccio di Alex su basa sull'assunto che Access valuta un'espressione booleana restituendo -1 (true) mentre MySql (e credo SQL Server) restituiscono +1.
    Forse si potrebbe anche rivedere la query sostituendo il DateSerial (che con MySQL occorre sostituire con qualcosa di simile : STR_TO_DATE(CONCAT_WS('-', Year, Month, Day), '%Y-%c-%e') AS theDate) con il Format
    Resta chiaro che voler utilizzare la query scritta per Access per altri RDBMS impone una qualche revisione sintattica anche nel caso di funzioni presenti nei vari ambienti (Format, Date_Add).

    Al momento non mi vengono altre considerazioni ...

  3. #33
    L'avatar di @Alex
    @Alex non è in linea Moderatore Globale
    Ora mi hai fatto luce , ottima analisi.

    P.S. corretta osservazione per la parte Booleana, in qual caso basterebbe un ABS ed un segno... in JET in quanto di fatto noi SOMMIAMO [+1] che con JET ottengo con il Doppio [-], quindi un [+ABS(Ini<End)] andrebbe sempre bene.
    In ogni caso il fatto che il predicato SQL sia da guardare direi che fa parte delle cose normali come anche confermi giustamente al termine della tua considerazione, se invece servisse stravolgere o in ogni caso modificare il codice del FE per far giare il tutto lo troverei un poco più complicato.

    Grazie a te ed a Willy.
    ℹ️ Leggi di più su @Alex ...

  4. #34
    L'avatar di willy55
    willy55 non è in linea Scribacchino
    Quote Originariamente inviato da Max.Riservo
    In sintesi :
    - la soluzione proposta da Willy prevede 2 query distinte
    - la query con periodo nello stesso anno non l'ho provata (ma credo non abbia alcun problema)
    - la query con periodo che scavalca l'anno funziona ma non considera i dati agli estremi della ricerca (ovvero per il periodo 15/12-07/01 per ottenere i dati corretti occorre ricercare per 14/12-08/01)
    - come alternativa alla ricerca effettuata tra i limiti ('MMDD' >= And 'MMDD' <= ) = false io ho utilizzato l'operatore Not between ottenendo gli stessi risultati di cui sopra
    La condizione della query, da me indicata, si basa sul presupposto di dividere in due insiemi i valori che ricadono nell'intervallo e quelli che ne sono fuori.
    E' chiaro che, in base a come si impostano le condizioni dell'intervallo (DAL - AL) se ne estrae una porzione inclusiva o meno degli estremi.
    Se si agisce con gli operatori di confronto (maggiore e minore) con TRUE, vengono esclusi i valori del giorno specificato, mentre con FALSE l'intervallo li comprende.
    Variando la condizione dell'intervallo, utilizzando gli operatori di confronto >= (maggiore - uguale) e <= (minore - uguale) gli estremi (per TRUE) vengono compresi, nel primo caso, ed esclusi nel secondo (per FALSE).
    Infatti i 365 giorni (o 366 del bisestile) con una sola condizione ricadono o su uno o l'altro intervallo preso in considerazione.
    Tale situazione è utilizzabile, nei vari esempi citati, con i valori (che agiscono sugli intervalli) siano essi numerici o stringa (applicabili quindi anche a BETWEEN e/o la sua negazione).
    Infatti, nella condizione. impiegando BETWEEN i valori degli estremi sono inclusivi e quindi è come se si operasse con >= e <=.
    E' chiaro che se si vuole impiegare una interfaccia per specificare i due valori quali estremi dell'intervallo ove il primo indichi il valore di partenza ed il secondo quello di arrivo (DAL - AL) come ad esempio dal 15/12 al 07/01 (e non viceversa dal 07/01 al 15/12) ciascun elemento posizionale nel caso di periodo (a cavallo di due anni) è da gestire la porzione che eccede l'anno stesso di partenza e quindi la condizione viene incrementata con la parte relativa all'anno successivo (ed è questa la soluzione proposta da Alex).

    In merito alla opportunità di rendere il codice compatibile con i vari RDBMS partendo dalle caratteristiche comuni in SQL come specificare sia gli operatori di confronto o l'impiego di BETWEEN il problema risulta quando si utilizzano funzioni specifiche del linguaggio.
    Come ad esempio implementare la funzione DATEADD di Access nella specifica sintassi dell'ambiente (Transact) SQL SERVER o Oracle o variarla nella DATE_ADD di MYSQL/MariaDB o ADD_DAYS di DB2.
    Ultima modifica di willy55; 24-08-2021 21:15 
    ℹ️ Leggi di più su willy55 ...

  5. #35
    L'avatar di Max.Riservo
    Max.Riservo non è in linea Scribacchino
    Quote Originariamente inviato da willy55 Visualizza il messaggio
    Se si agisce con gli operatori di confronto (maggiore e minore) con TRUE, vengono esclusi i valori del giorno specificato, mentre con FALSE l'intervallo li comprende.
    Variando la condizione dell'intervallo, utilizzando gli operatori di confronto >= (maggiore - uguale) e <= (minore - uguale) gli estremi (per TRUE) vengono compresi, nel primo caso, ed esclusi nel secondo (per FALSE).
    Sorry Willy hai ragione. Ho utilizzato per i miei test >= & <= quando tu indicavi > & < (proprio non ci ho fatto caso - devo cambiare occhiali o prestare più attenzione).

    Utilizzando quanto suggerito da Willy per il periodo di ricerca 15/12 - 07/01 ottengo anche in questo caso 24 records come da 'desiderata'.

+ Rispondi al messaggio
Pagina 4 di 4 primaprima ... 234

Potrebbero interessarti anche ...

  1. Generare numeri casuali senza duplicati (estrazione lotto)
    Da padronus5 nel forum Microsoft Excel
    Risposte: 4
    Ultimo Post: 06-06-2014, 10:36
  2. Estrazione URL da range di celle evitando ciclo
    Da genespos nel forum Microsoft Excel
    Risposte: 0
    Ultimo Post: 22-08-2013, 13:18
  3. Risposte: 5
    Ultimo Post: 07-08-2010, 09:41
  4. Filtrare per Mese e Anno senza inserire i Giorni
    Da Maury63 nel forum Visual Basic .Net
    Risposte: 9
    Ultimo Post: 01-07-2010, 15:59
  5. Inserimento solo l'anno (senza mese e giorno)
    Da Martin Landau nel forum Microsoft Word
    Risposte: 5
    Ultimo Post: 30-10-2006, 12:24