2012-05-03 17 views
17

In Oracle 10g ho riscontrato un problema durante l'utilizzo del tipo DATE nella mia tabella. Voglio solo il mio negozio di campo DATE solo DATE senza tempo automaticamente.Tipo di data senza orario in Oracle

C'è così tanto soluzione, so che come l'utilizzo di TO_CHAR e TO_DATE o TRUNC ma ho affrontato che sto usando così tanto le procedure per inserire o aggiornare i dati e non hanno tempo per aggiornare tutti loro.

Come posso risolvere questo problema?

+0

personalmente utilizzo ancora il tipo di data e reimposta l'ora su 0. – ericosg

+0

@ericosg come si può resettare il tempo a 0? –

+1

Penso che Rob van Wijk abbia risposto abbastanza bene – ericosg

risposta

23

La soluzione migliore sarebbe quella di:

  1. rimuovere tutti i tempi dalla vostra colonna DATA (update yourtable set yourdatecolumn = trunc(yourdatecolumn))

  2. garantire che tutte le date future non contengono alcuna parte il tempo mettendo un vincolo di controllo per la colonna utilizzando check (yourdatecolumn = trunc(yourdatecolumn))

  3. regolare tutte le istruzioni INSERT e UPDATE oppure, se si è fortunati, regolare l'API, per inserire solo le date TRUNC.

La soluzione più semplice sarebbe quella di:

  1. (opzionale) Rimuovere tutti i tempi dalla vostra colonna DATE.

  2. Creare un prima riga di inserimento o aggiornamento trigger del database che imposta :new.yourdatecolumn := trunc(:new.yourdatecolumn);

+0

Grazie mille, la soluzione migliore per me è: aggiornare prima tutta la colonna DATA quindi aggiungere trigger prima di inserire una riga :) –

+0

Hai ragione. Ho cambiato l'ordine. –

+1

Ricorda che quando alcune versioni aggiungono il vincolo di controllo al piano di esecuzione (ad esempio se hai detto "where yourdatecolumn = ...") possono calcolare una stima di cardinalità erroneamente piccola come risultato. Penso che fosse 10,1 –

-3

io uso come questo

inserto: Insert into table (name_date) values(to_date(current_date,'dd/mm/yyyy')); aggiornamento: update table set name_date=to_date(current_date,'dd/mm/yyyy') where id=1;

questo è tutto ...

Problemi correlati