#sql #database #oracle #datetime #format
#sql #База данных #Oracle #datetime #формат
Вопрос:
Я хочу преобразовать (с помощью Oracle) временную метку даты [2018-01-25T00:00:00.000 00:00] в дату [2018-01-24]. Я пробовал несколько форматов, однако, похоже, я не могу найти подходящий для его преобразования. Я не уверен, как обрабатывать 00:00.
Заранее спасибо
Ответ №1:
Это зависит от того, что вы действительно спрашиваете.
Если у вас есть настоящий Oracle timestamp
и вам нужна строка в формате 'YYYY-MM-DD'
, вы можете использовать to_char()
:
select to_char(col, 'YYYY-MM-DD') as res from mytable
Если у вас есть строка в формате временной метки ISO, и вы хотите получить строку в качестве результата:
select substr(col, 1, 10) as res from mytable
Если у вас есть timestamp
столбец, и вы хотите установить временную часть в 00:00:00
:
select trunc(col) as res from mytable;
Это возвращает значение типа date
данных .
Комментарии:
1. Попробовал to_char(col, ‘ГГГГ-ММ-ДД’), и это выдало ошибку. Более конкретно, в нем говорилось: «oracle.xdo.XDOException: java.sql.SQLException: ORA-01481: недопустимая модель формата чисел». Попробовал 2-й вариант с substr, однако это оставило данные без изменений. 3-й, который я пробовал с помощью trunc (col), также отображал тот же неизмененный результат..
2. @Dale: каков тип данных этого столбца?
3. @GMB — Ах.. Понял. Опечатка в имени столбца. 3-й сделал свое дело. Спасибо!
4. Комментарий к 3-му варианту неверен; если вы используете
TRUNC
, то возвращаемое значение будет иметьDATE
тип данных , а неTIMESTAMP
тип данных.5. Все еще работает для меня, однако я ценю исправление.