to_date не может распечатать метку времени - PullRequest
1 голос
/ 10 декабря 2011

Я хочу напечатать отметку времени из приведенного ниже sql

select to_date('01/01/2011 12:00:00 AM','dd/mm/yyyy hh:mi:ss AM') from dual;

токовый выход -> 1/1/2011 (не печатать отметку времени только в течение 12 часов.печать.

но мне нужен вывод как 1/1/2011 12:00:00 AM

Ответы [ 3 ]

4 голосов
/ 10 декабря 2011

TO_DATE преобразует строку в DATE.DATE хранится в упакованном двоичном формате, который не читается человеком.Oracle DATE не имеет формата.Поэтому, когда вы просите программу отобразить дату, она должна преобразовать DATE в строку.Если вы не укажете явно формат, выполнив явное TO_CHAR, такой инструмент, как SQL * Plus, преобразует дату в строку, используя NLS_DATE_FORMAT сеанса.Другие приложения могут выбрать другие способы преобразования даты в строку - например, используя региональные настройки клиента или разрешив пользователю настроить формат.

Если вы хотите вернуть строку в определенномформат, который представляет DATE, вам нужно будет использовать явный TO_CHAR.Что-то вроде

SELECT to_char( some_date_column, 'dd/mm/yyyy hh:mi:ss AM' )
  FROM some_table

В указанном вами конкретном случае, поскольку у вас в руке есть строка в виде строки, вам просто нужно выбрать ее из двойного, а не делать TO_DATE для ее преобразованияна дату, а затем TO_CHAR, чтобы преобразовать его обратно в строку.Я предполагаю, однако, что у вас есть фактическая DATE в фактической таблице, из которой вы пытаетесь выбрать.

1 голос
/ 10 декабря 2011

Лучший способ управления форматированием - использовать to_char и явно указывать желаемый формат даты.

select to_char(to_date('01/01/2011 12:00:00 AM','dd/mm/yyyy hh:mi:ss AM'),'DD/MM/yyyy hh:mi:ss AM') 
  from dual;
0 голосов
/ 10 декабря 2011

Вы можете использовать

select  Convert(varchar,'01/01/2011 12:00:00 AM',113)
...