#sql #db2
#sql #db2
Вопрос:
Хорошо, я смог это исправить.
Я хочу преобразовать строку «10 февраля 2019 11:20» в «ДД-мм-гггг чч24: mi: ss».
Я пытался установить дату, но это не сработало. Я видел в других потоках, что функция translate может быть подходящим вариантом. Однако я несколько новичок в SQL, и ни одно из объяснений того, как использовать translate таким образом, каким-либо образом я не мог понять.
Я использую Windows и довольно свежую версию db2
Оригинал является
выберите
случай
когда (длина (столбца) = 50, тогда
to_date(substr(столбец, 1, 17), ‘дд-мм-гггг чч24:mi’))
ещё
Дата
завершение
из таблицы
Таким образом, это нахождение даты в строке большего размера.
теперь код является
Выберите
случай
когда (длина (столбца) = 50, тогда
to_timestamp(substr(столбец, 1, 17), ‘дд-мм-гггг чч24: mi’))
ещё
Дата
завершение
Из таблицы
Примечание: Я только что попробовал to_timestamp (’10 февраля 2019 года 11:20′, ‘дд-мм-гггг ч24), и я получил «10 февраля 2019 года 11:20», не может быть интерпретировано с использованием строки формата «дд-мм-гггг ч24: mi» для функции TIMESTAMP_FORMAT.
Комментарии:
1. Пожалуйста, покажите
to_date()
инструкцию, которую вы используете. Также объясните, почему это не работает.
Ответ №1:
Если вы хотите преобразовать строку -> Временную метку, попробуйте это:
отметка времени(’10 февраля 2019 года, 11:20′, ‘дд-пн-гггг, чч24:mi’)
to_timestamp
является псевдонимом для timestamp_format
.
Если вам нужно просто другое строковое представление этой временной метки (например, ваше 10-Feb-2019 11:20
-> 10-02-2019 11:20:00
), попробуйте это:
to_char(отметка времени (’10 февраля 2019 11:20′, ‘дд-пн-гггг чч24: mi’), ‘ДД-ММ-ГГГГ ЧЧ24: MI: SS’)
to_char
является псевдонимом для varchar_format
.
Комментарии:
1. Я попробовал это, но получил ошибку SQL [22007]: «10 февраля 2019 11:20» не может быть интерпретировано с использованием строки формата «дд-мм-гггг чч24: mi» для функции TIMESTAMP_FORMAT.
2. Вы сделали не то, что я предложил. ‘mon’ вместо ‘mm’.
3. О, хорошо, я этого не уловил.
Ответ №2:
В DB2 date
нет компонента времени.
Итак, попробуйте to_timestamp()
:
select to_timestamp('10-Feb-2019 11:20', 'DD-Mon-yyyy hh24:mi')
Обратите внимание, что секунды не указаны в строковом значении, поэтому их не должно быть в спецификации формата. Однако конечное значение будет содержать секунды — все они равны нулю.
Комментарии:
1. Строка правильного формата должна быть
DD-mon-yyyy hh24:mi
, а неDD-mm-yyyy hh24:mi
.2. @MarkBarinstein . . . Хороший улов. Что действительно иронично, так это то, что я тестировал это в Oracle, и это работает с обоими
mm
иmon
.3. Спасибо за вашу помощь.