2012-05-03 79 views
17

W Oracle 10g dostałem problem, gdy używam typu DATE w mojej tabeli. Po prostu chcę, aby mój magazyn DATE był automatycznie bez czasu.Typ daty bez czasu w Oracle

Jest tyle rozwiązanie, wiem o tym, jak za pomocą TO_CHAR i TO_DATE lub TRUNC ale mam do czynienia, że ​​używam tak wiele procedur, aby wstawić lub aktualizacji danych i nie mają czasu, aby zaktualizować wszystkie z nich.

Jak mogę rozwiązać ten problem?

+0

osobiście nadal używam typu daty i resetuję czas do 0. – ericosg

+0

@ericosg Jak ustawić czas na 0? –

+1

Myślę, że Rob van Wijk odpowiedział na to całkiem dobrze. – ericosg

Odpowiedz

23

Najlepszym rozwiązaniem byłoby:

  1. Usuń wszystko razy od kolumnie DATE (update yourtable set yourdatecolumn = trunc(yourdatecolumn))

  2. upewnić się, że wszystkie przyszłe daty nie zawierają część czasu poprzez umieszczenie ograniczenie wyboru w kolumnie za pomocą check (yourdatecolumn = trunc(yourdatecolumn))

  3. dostosować wszystkie instrukcje INSERT i UPDATE lub - jeśli masz szczęście - dostosuj interfejs API, aby wstawiać tylko daty TRUNCed.

Najprostszym rozwiązaniem byłoby:

  1. (opcjonalnie) usunąć wszystkie czasy z kolumny Data.

  2. Utwórz wyzwalacz przed włożeniem wiersz lub aktualizacji, która ustawia :new.yourdatecolumn := trunc(:new.yourdatecolumn);

+0

Wielkie dzięki, najlepszym rozwiązaniem dla mnie jest: zaktualizuj najpierw całą kolumnę DATE, a następnie dodaj wyzwalacz przed wstawieniem wiersza :) –

+0

Masz rację. Zmieniłem kolejność. –

+1

Należy pamiętać, że gdy niektóre wersje dodają ograniczenie sprawdzające do planu wykonania (na przykład, jeśli podano "wheredatecolumn = ..."), mogą obliczyć niepoprawnie małą oszacowaną liczność. Myślę, że to było 10,1 –

-3

używam jak ten

wkładki: Insert into table (name_date) values(to_date(current_date,'dd/mm/yyyy')); aktualizacja: update table set name_date=to_date(current_date,'dd/mm/yyyy') where id=1;

to wszystko ...

Powiązane problemy