2012-04-05 2 views
2

I`m пытается обновить время в поле даты и времениОбновление часов в 24 часа поля даты и времени в базе данных оракула

UPDATE table_name 
    SET col_name=to_DATE('04/02/2012 00:12:00','MM/DD/YYYY HH24:MI:SS') 
WHERE col_name1='rer'; 

После обновления в дБ, output подобно этому

'04/02/2012 12:12:00'

Extra 12 добавлено в поле Час,
Как я могу сделать это, чтобы не добавлять дополнительные 12 в часовое поле ???

+0

Как вы можете отобразить вывод (какой запрос вы используете)? –

+0

marcin, Просто оператор select, который я использую, например: «select col_name from tab_name», в котором указано условие. – palak

ответ

3

Оператор UPDATE заявление в порядке. Он не добавляет никаких «дополнительных 12» к столбцу даты. Единственная проблема, с которой вы столкнулись, - показать значения. Столбец даты не сохраняет свои значения в каком-либо конкретном формате, например «MM/DD/YYYY HH24: MI: SS», он содержит двоичные данные. При запросе таблицу с таким заявлением, как

SELECT col_name FROM table_name 

дата отображается с помощью NLS_DATE_FORMAT Вашей сессии, которая, вероятно, «MM/DD/YYYY HH: MI: SS». В этом формате ваша дата отображается как '04/02/2012 12:12:00 '. Если вы запустите следующую инструкцию в сеансе

ALTER SESSION SET NLS_DATE_FORMAT='MM/DD/YYYY HH24:MI:SS'; 

, а затем ваш запрос

SELECT col_name FROM table_name 

вы увидите дату в нужный формат. Другой способ - использовать TO_CHAR как

SELECT TO_CHAR(col_name, ''MM/DD/YYYY HH24:MI:SS') FROM table_name 
+0

Marcin, в первую очередь спасибо за ответ, у меня все еще есть такой же формат даты, даже после запуска вашего оператора alter, я пробовал для этого-> SELECT TO_DATE ('03/24/2012 00:30:00 ',' MM/DD/YYYY HH24: MI: SS ') FROM DUAL. Он по-прежнему отображает часы как «12» только – palak

+0

Какой инструмент вы используете для выполнения этих запросов (SQL * Plus? PL/SQL Developer? SQL Developer? Other?) –

0

Просто предположим, может быть ошибка в строке, используемой для форматирования вывода, с отсутствием «24» в «HH24». Поскольку у вас есть только строка формата для ввода (а не вывода), указанного выше, я не могу сказать, так ли это. Вот пример того, что я имею в виду.

Запрос 1:

select to_char(to_date('04/02/2012 00:12:00','MM/DD/YYYY HH24:MI:SS'), 
    'mm/dd/yyyy HH24:mi:ss') from dual; 

Результат 1:

04/02/2012 00:12:00 

Запрос 2:

select to_char(to_date('04/02/2012 00:12:00','MM/DD/YYYY HH24:MI:SS'), 
    'mm/dd/yyyy HH:mi:ss') from dual; 

Результат 2:

04/02/2012 12:12:00 

Чтобы было ясно, я думаю, что решение вашей проблемы может быть, чтобы проверить формат вашего оператора выбора, и выберите данные, как это:

SELECT to_char(col_name,'MM/DD/YYYY HH24:MI:SS') FROM table_name WHERE col_name1='rer'; 
+0

: Я не думаю, что это не так, хотя он дает правильный ответ, но в моем случае, когда я пытаюсь выполнить обновление, используя 'hh: mi: ss' и time' 00: 12: 00', это дает me 'ORA-08149 час должен быть от 1 до 12' –

+0

Я не имею в виду, что он использует строку формата, такую ​​как 'hh: mi: ss' в своем заявлении о обновлении, я предполагаю, что он может использовать ее в выражении select не показано выше. В этом случае у него будет правильное время, хранящееся в его таблице, но оно будет отформатировано неправильно, когда он будет использовать select и to_char для его просмотра. Я не думаю, что вы получите ORA-08149 в заявлении типа 'select to_char (# dateTimeField #, 'mm/dd/yyyy HH: mi: ss') из # tableName #' – user506069

+0

: да, мы не получим выше, при выборе '' ', но, как упоминалось им, ему нужно обновить инструкцию со временем' 00: 12: 00', поэтому в этом случае произойдет сбой обновления и произошла ошибка выше. В моем случае 'HH24: MI: SS 'работает для меня и получает желаемый результат' 04/02/2012 00: 12: 00'. Я думаю, это должно быть связано с параметром NLS_DATE_FORMAT в словаре данных 'v $ parameter'. –

Смежные вопросы