Как мне преобразовать временную метку даты в oracle в дату?

#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. Все еще работает для меня, однако я ценю исправление.