2013-04-03 19 views
6

Jak wstawić datę systemową w dd/mm/rrrr do tabeli używając oracle 10g?Wstawianie daty systemowej do oracle

Podczas korzystania z następującego zapytania wstawia datę systemową jako 03/04/0013. Potrzebuję 03/04/2013. Czy możesz mi pomóc rozwiązać ten problem?

insert into GtTable 
values('111','Name',300,'Tour',to_date('02/04/2012','DD/MM/YYYY'),to_date(sysdate,'DD/MM/YYYY')); 

Jednak przy wstawianiu "02/04/2012" bezpośrednio akceptuje to samo, co "02/04/2012".

+0

Czy na pewno działa? Czy próbowałeś czegoś takiego jak "22/04/2012"? Co to jest zestaw 'nls_date_format'? – hofmeister

Odpowiedz

4

Jeśli ostatnie pole na wkładce jest pole data type, nie ma potrzeby żadnej konwersji na SYSDATE, więc następujące powinno być OK:

insert into GtTable 
values('111', 'Name', 300, 'Tour', to_date('02/04/2012','DD/MM/YYYY'), sysdate); 

Ale jeśli jest to pole varchar, następujące powinny działać:

insert into GtTable 
values('111', 'Name', 300, 'Tour', to_date('02/04/2012','DD/MM/YYYY'), to_char(sysdate, 'dd/mm/yyyy')); 
+0

Próbuję użyć go do wstawienia bieżącej daty, ale daje mi to format daty nierozpoznany błąd to_data (SYSDATE, "DD-MMM-RRRR") –

+0

@MRAND Myślę, że problem, który otrzymujesz został objęty ** ABCade * * powyżej, w [this comment] (https://stackoverflow.com/a/15779452/2156229) – warantesbr

12

nie należy aktywować TO_DATE na randkę

sysdate jest już data, po uruchomieniu TO_DATE wraz z nim jako pierwszym parametrem powoduje, że Oracle niejawnie przekształca go w ciąg znaków zgodnie z NLS_DATE_FORMAT, który w twoim przypadku prawdopodobnie zawiera YY, a nie YYYY.

datę w Oracle jest numer reprezentujący datę i czas, to nie ma „format”, jeśli chcesz wstawić sysdate bez wartości razem trzeba obciąć to tak:

insert into GtTable 
values('111','Name',300,'Tour',to_date('02/04/2012','DD/MM/YYYY'),trunc(sysdate)) 
+0

[Here] (http://www.sqlfiddle.com/#!4/d41d8/9426) jest przykładem sqlfiddle –

0

Myślę, że format wyświetlania jest spowodowany parametrem środowiskowym TO_CHAR (SYSDATE, "DD/MM/RRRR") MOŻNA CZYNIĆ datę systemową jako DD/MM/RRRR, ale nie jest to już typ daty.

+1

Nie sądzę, że to dobry pomysł, ponieważ jeśli typem danych jest "DATA", to oracle będzie niejawnie konwertować ciąg znaków na datę zgodnie z nls_date_format i nawet jeśli funkcja 'to_char' będzie działać poprawnie, wstawienie nie powiedzie się ... zobacz [tutaj] (http://www.sqlfiddle.com/#!4/d41d8/9430) –

+0

Rok, masz rację. Jeśli chcesz wyświetlać jako dd/mm/rrrr, to_char może działać. Podczas wstawiania, jeśli ta kolumna jest typu danych, wstawianie się nie powiedzie. Możesz to zrobić ponownie, ale to trochę głupie ... :) – Gentlezerg