2011-08-12 2 views
2

У меня есть запрос вставки:Oracle Получите только время от To_Date() в запросе?

INSERT INTO THE_TABLE (Field_A) 
VALUES (TO_DATE('08/12/2011 08:35:42 AM','HH:MI:SS PM')) 
WHERE Something = 'SomethingElse' 

Field_A является полем Даты. Когда я выполняю запрос, Field_A все еще показывает дату и время.

Есть ли способ захватить только время?

Я попытался To_Char(), но затем он преобразуется в строку и поле не возьмет ее.

Я также пробовал TO_DATE ('08: 35: 42 AM ',' HH: MI: SS PM '), и это тоже не работает, оно все еще показывает дату и время в таблице.

ответ

2

Если ваше поле является полем даты, у вас всегда будет дата в вашем дате.

Вы можете сохранить его как что-то еще, например, просто количество секунд и использовать функцию преобразования, чтобы преобразовать ее в определенное время. Поскольку кажется, что TO_CHAR не будет принимать число и преобразовать его в определенное время, вам нужно будет сделать это со стороны приложения.

Так что я бы просто сохранил его как DATE в любом случае, чтобы избежать путаницы; просто игнорируйте часть даты при ее использовании.

И, кстати, это:

Я попытался to_char(), но затем он преобразуется в строку и поле не примет его.

Не совсем верно, потому что строки в правильном формате неявно преобразуются в DATE.

3
TO_DATE('08:35:42 AM','HH:MI:SS PM') 

Причина этого не работает, потому что это не полная дата. Даже когда вы используете to_date ('07/12/2011 ',' MM/DD/YYYY '), Oracle хранит дату и время, но делает все компоненты времени ZERO. Таким образом, фактическая дата хранится 07/12/2011. HH: MI: SS

Если вы хотите отдельно хранить компонент времени, он должен быть полем varchar, и вам нужно будет добавить его в часть даты, чтобы получить полная дата. Пример ..

Select to_date(
      to_char(date_field_stored_as_date,'DD-MON-YYYY') || 
      ' ' || 
      to_char(time_field_stored_as_varchar), 
     'DD-MON-YYYY HH24:MI:SS'  
     )