Oracle Получить только время из To_Date () в запросе? - PullRequest
2 голосов
/ 12 августа 2011

У меня есть запрос на вставку:

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 ]

3 голосов
/ 12 августа 2011
TO_DATE('08:35:42 AM','HH:MI:SS PM')

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

Если вы хотите хранить компонент времени отдельно, это должно быть поле 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'    
       )
2 голосов
/ 12 августа 2011

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

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

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

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

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

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

...