2011-09-29 7 views
6

Rozumiem, że Oracle sysdate zwraca bieżącą datę I czas. To jest świetne dla znaczników czasu lub datetime kolumn.Oracle: Podobne do sysdate, ale zwraca tylko czas i tylko datę

Teraz powiedzmy, że mam tylko kolumnę DATE. Jakie słowa kluczowe należy stosować w zapytaniu o wstawianie?

insert into myTable1(myDateOnlyColumn) values(???) 

Załóżmy, że mam kolumnę Tylko TIME. Jakie słowa kluczowe należy stosować w zapytaniu o wstawianie?

insert into myTable2(myTimeOnlyColumn) values(???) 

Dzięki!

Odpowiedz

8

W Oracle nie ma czegoś takiego jak kolumna DATE only. Typ danych DATE przechowuje datę i godzinę.

Jeśli tylko dbać o dacie, można:

INSERT INTO tbl (dtCol) VALUES (TO_DATE('20110929','YYYYMMDD'); 

Pozostawia składnik czas na 00:00:00. Nie musisz tego jednak wyświetlać.

Jeśli interesuje Cię tylko komponent czasu, wciąż masz zapisaną datę w kolumnie. Będziesz musiał sobie z tym poradzić na wyjściu. Na przykład:

SQL> CREATE TABLE dt (d DATE); 

SQL> INSERT INTO dt VALUES (TO_DATE('1:164800','J:HH24MISS')); 

1 row inserted 

Pokazuje rzeczywistej zawartości kolumny ujawnia datę wstawiono:

SQL> SELECT * FROM dt; 

D 
-------------------- 
0/0/0000 4:48:00 PM 

Wybór tylko składnik czasu z kolumny daje wyjście chcesz:

SQL> SELECT TO_CHAR(d, 'HH24:MI:SS') d FROM dt; 

D 
-------- 
16:48:00 

SQL> 

Jeśli uważasz, że potrzebujesz tylko kolumny czasu, zawsze upewnij się, że zawsze wstawiasz ten sam komponent daty.

+0

Więc przechowuje wszystkie zera na część czasu, kiedy jestem przechowywania datę urodzenia? A co z kolumnami typu TIME? – TraderJoeChicago

+0

Dobra odpowiedź. Ponadto, jeśli masz datę obejmującą godziny, minuty i sekundy: trunc (sysdate, 'd'), aby je usunąć, zamiast używać TO_CHAR –

+1

@DCookie - Dobra odpowiedź. Obejmowałbym jednak typy danych INTERVAL dla przechowywania czasów. Jeśli przechowujesz tylko czas, generalnie przechowujesz czas (tj. 4 godziny i 48 minut), który idealnie pasuje do INTERWAŁU DZIEŃ DO DRUGIEGO, a nie do przechowywania czasu podobnego do godziny 16:48. –

12

Aby usunąć czas z sysdate, wystarczy napisać TRUNC(sysdate).

Na przykład:

SELECT TRUNC(SYSDATE) "TODAY" FROM DUAL; 

daje:

TODAY      
------------------------- 
'2012-10-02 00:00:00'  
0
select sysdate, to_date(to_char(sysdate, 'dd/mm/yyyy'),'dd/mm/yyyy') d 
from dual 
+1

Musisz wyjaśnić, dlaczego ten kod rozwiąże odpowiedź na pytanie dotyczące op. – bcesars

Powiązane problemy