2012-02-18 3 views
2

Мне нужно преобразовать формат даты в Oracle SQL Developerобновление значение даты в оракула

Текущий формат гггг/мм/дд-чч: мм: сс: SSS и мне нужно, чтобы преобразовать его в формат гггг-мм- dd hh: mm: ss CST Я действительно не знаю SQL, но сделал некоторые исследования. Вот команда, которую я консультировал других людей на форуме. но это бросает мне непризнанную ошибку команды. название таблицы B и название колонки First

UPDATAE B 
set First = concat(to_char(substring(FIRST,1,4) + '-' + substring(FIRST, 6, 2) + '-' + substring(FIRST, 9, 2) + ' ' + substring(FIRST, 12, 8)); 

Может ли кто-нибудь здесь помочь мне? заранее спасибо.

+0

У вас есть опечатка (UPDATAE?). Вы также просто устанавливаете одно текстовое поле в другое. Где дата? – muratgu

+0

Если столбец является столбцом 'DATE', он не имеет« формата ». Вам не нужно ОБНОВИТЬ таблицу. Просто используйте другой формат, когда * выбирая * из таблицы. Если столбец не является столбцом «DATE», вы должны изменить свой дизайн. Не храните даты в столбцах 'varchar'. –

ответ

1

«непризнанная команда» это всего лишь опечатка из UPDATE:

UPDATAE B 

// Should be 
UPDATE B 

Чтобы проверить результат, что вы ожидаете, прежде чем выполнить UPDATE заявления, используйте SELECT:

SELECT 
    to_char(substr(FIRST,1,4) || '-' || substr(FIRST, 6, 2) || '-' || substr(FIRST, 9, 2) || ' ' || substr(FIRST, 12, 8)) AS Test 
FROM B 
+0

спасибо, это была глупая орфографическая ошибка, я выполняю вашу команду и теперь показывает недопустимое количество аргументов :( – user1200687

+0

, кстати, на что указывает этот столбец в сообщении об ошибке? Ошибка в командной строке: 1 Колонка: 7 – user1200687

+0

@ user1200687 Увидел изменения, приведенные выше. Я только что изменил ваш исходный оператор, но понимаю, что он не будет работать должным образом для Oracle. '' concatenate() 'не должен был быть там вообще, и все' + 'должны иметь был '||' –

0

Уммы. .. Я либо пропускаю что-то очень очевидное, либо все остальные.

Вы хотите провести даты? Используйте to_date и to_char. Я собираюсь предположить, что это ss:sss означает секунды, затем дробные секунды. Вы дата, как представляется, быть строкой, поэтому мы должны преобразовать его дважды:

update b 
    set first = to_char(to_date(my_date, 'yyyy/mm/dd-hh:mi:ss:ff3') 
         ,'yyyy-mm-dd hh:mi:ss') 

Как правило, при использовании даты это гораздо, гораздо проще использовать только date functions и при условии formats.

В качестве добавленной точки, если у вас есть дата, храните ее в качестве даты. В дальнейшем это спасет мир.

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