Обновление часов в 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'

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


person palak    schedule 05.04.2012    source источник
comment
Как вы отображаете вывод (какой запрос вы используете)?   -  person Marcin Wroblewski    schedule 06.04.2012
comment
marcin, Просто оператор выбора, который я использую, например, выберите col_name из tab_name, за которым следует условие where.   -  person palak    schedule 09.04.2012


Ответы (2)


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

SELECT col_name FROM table_name

дата отображается с использованием вашего сеанса NLS_DATE_FORMAT, который, вероятно, «MM/DD/YYYY HH:MI:SS». В этом формате ваша дата отображается как «02.04.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
person Marcin Wroblewski    schedule 09.04.2012
comment
Марчин, прежде всего спасибо за ответ, у меня все еще тот же формат даты даже после запуска вашего оператора alter, я пробовал для этого->SELECT TO_DATE('03/24/2012 00:30:00','MM/DD/ YYYY HH24:MI:SS') FROM DUAL..Часы по-прежнему отображаются только как 12 - person palak; 09.04.2012
comment
Какой инструмент вы используете для выполнения этих запросов (SQL*Plus? PL/SQL Developer? SQL Developer? другой?) - person Marcin Wroblewski; 10.04.2012

Просто предположение, может быть ошибка в строке, используемой для форматирования вывода, с отсутствием «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';
person user506069    schedule 05.04.2012
comment
: Я не думаю, что это не так, хотя это дает вам правильный ответ, но в моем случае, когда я пытаюсь выполнить обновление, используя hh:mi:ss и время 00:12:00, это дает мне ORA-08149 hour must be between 1 and 12 - person Gaurav Soni; 06.04.2012
comment
Я не имею в виду, что он использует строку формата, такую ​​​​как hh:mi:ss, в своем операторе обновления, я предполагаю, что он может использовать ее в операторе выбора, не показанном выше. В этом случае у него будет правильное время, сохраненное в его таблице, но оно будет неправильно отформатировано, когда он использует select и to_char для его просмотра. Я не думаю, что вы получите сообщение ORA-08149 в таком заявлении, как select to_char(#dateTimeField#, 'mm/dd/yyyy HH:mi:ss') from #tableName#. - person user506069; 06.04.2012
comment
: да, мы не получим вышеуказанную ошибку в то время как selecting, но, как он упомянул, ему нужно обновить оператор со временем 00:12:00, поэтому в этом случае обновление завершается с ошибкой и вызывает указанную выше ошибку. В моем случае HH24:MI:SS работает для меня и получение желаемого результата 04/02/2012 00:12:00. Я думаю, что это должно быть связано с параметром NLS_DATE_FORMAT в словаре данных v$parameter. - person Gaurav Soni; 06.04.2012
comment
Он никогда не упоминал об исключении при выполнении обновления. Проблема в том, что его output выглядит неправильно. Я просто предположил, что, возможно, он неправильно форматирует вывод. Если он использует hh24:mi:ss на update, но hh:mi:ss на select, это может вызвать упомянутую проблему. Но я согласен, что это может быть что-то совсем другое. - person user506069; 06.04.2012
comment
: Это то, что я говорю, я получаю это исключение, когда ставлю hh:mi:ss. Может быть, вы неправильно интерпретировали то, что я сказал. В любом случае нужно найти решение для этого. - person Gaurav Soni; 06.04.2012
comment
Гаурав, яm getting the error you specified only when I try to update like this->UPDATE IWISHMASTER SET ED=to_DATE('04/02/2012 00:12:00','MM/DD/YYYY HH:MI:SS') WHERE WT='rer' Nothing much iвэ поменял яve remoived 24 from HH24 tatс. - person palak; 06.04.2012
comment
Когда онs "00:12:00" we wonне может использовать формат ЧЧ:МИ:СС - person palak; 06.04.2012
comment
Какой запрос вы используете для выбора данных для вывода? - person user506069; 06.04.2012
comment
Просто оператор выбора, например, выберите col_name из tab_name, за которым следует условие where. - person palak; 09.04.2012