Come posso ottenere il corrente anno di utilizzo di SQL su Oracle?

Ho bisogno di aggiungere l’anno corrente come una variabile in un’istruzione SQL, come posso recuperare il corrente anno di utilizzo di SQL?

cioè

 TRA 
TO_DATE('01/01/**currentYear** 00:00:00', 'DD/MM/YYYY HH24:MI:SS') 
E 
TO_DATE('31/12/**currentYear** 23:59:59', 'DD/MM/YYYY HH24:MI:SS') 

 

6 Replies
  1. 100

    Utilizzando to_char:

    select to_char(sysdate, 'YYYY') from dual;

    Nel tuo esempio si può usare qualcosa come:

    BETWEEN trunc(sysdate, 'YEAR') 
        AND add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60;

    I valori di confronto sono esattamente quello che è richiesta:

    select trunc(sysdate, 'YEAR') begin_year
         , add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60 last_second_year
    from dual;
    
    BEGIN_YEAR  LAST_SECOND_YEAR
    ----------- ----------------
    01/01/2009  31/12/2009
    • Grazie, attraverso la tua risposta mi è stato in grado di creare l’SQL che mi serviva per diverse query!
    • Subtracking un secondo dal prossimo anno, per arrivare all’ultimo secondo di questo anno di lavoro per le date e la presumibile data e ora con frazionaria secondi. Se si finisce con timestamp e le frazioni di secondi, poi alcuni valori potrebbero essere entro il corrente anno, e perdere il between <begin this year> and <end next year> - 1 second. Di lavoro tra i diversi Rdbms che ogni hanno più tipi di data/ora con precisione diversi raccomando e preferiscono start_of_this_year <= value_under_test and value_under_test < 'start_of_next_year
  2. 60

    Un’altra opzione è:

    SELECT *
      FROM TABLE
     WHERE EXTRACT( YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate) 
    • Questo, combinato con la funzione di indice che vorresti effettuare la query abbastanza veloce.
    • La funzione di indice che vorresti aggiungere inutili complessità, qui. Perché utilizzare FBI quando si può fare con un semplice indice?
    • Un semplice indice date_field non saranno utilizzati se una funzione (come per ESTRATTO) è applicato alla colonna (testato su Oracle 11g) – sarebbe bello se lo facessero anche se. Una funzione di indice in base EXTRACT(ANNO DALLA date_field) può essere utilizzato, tuttavia.
    • Un altro vantaggio dell’utilizzo di un FBI in questo caso è che un istogramma può fornire lo strumento per ottimizzare il più accurate statistiche sulla diffusione di anni nella tabella.
  3. 15

    Utilizzare extract(datetime) funzione è così facile, semplice.

    Restituisce l’anno, il mese, il giorno, minuto, secondo

    Esempio:

    select extract(year from sysdate) from dual;
    • extract funzione di estrarre solo l’anno, il mese e il giorno da una datetime tipo di campo (come sysdate). Verranno estratti altri campi da timestamp campo però.
  4. 2

    Ancora un’altra opzione sarebbe:

    SELECT * FROM mytable
     WHERE TRUNC(mydate, 'YEAR') = TRUNC(SYSDATE, 'YEAR');
  5. 1

    Dal momento che stiamo facendo questo per la morte – non è necessario specificare un anno:

    select * from demo
    where  somedate between to_date('01/01 00:00:00', 'DD/MM HH24:MI:SS')
                    and     to_date('31/12 23:59:59', 'DD/MM HH24:MI:SS');

    Tuttavia accettato di rispondere da FerranB più senso se si desidera specificare tutti i valori che cadono entro il corrente anno.

  6. -5

    Per visualizzare la data corrente del sistema in oracle-sql

       select sysdate from dual;
    • Visualizzazione della data corrente non era la domanda.

Lascia un commento