#sql #oracle #date #timestamp
Вопрос:
У меня есть таблица в Oracle SQL Developer, как показано ниже:
col1
--------
2019-11-29 11:14:00.821822
2020-02-11 09:14:00.821847
И я хотел бы выбрать только строки, в которых дата «2019-11-29», как я могу это сделать?
Комментарии:
1. Во-первых, вам нужно знать тип данных столбца. При правильном оформлении это будет либо ДАТА, либо ОТМЕТКА ВРЕМЕНИ. Обе являются внутренними двоичными структурами без распознаваемого человеком формата, и то, что вы видите на экране, является результатом того, что клиентская программа (в вашем случае SQL Dev) применила функцию TO_CHAR для преобразования внутренней структуры в распознаваемую символьную строку. Вы бы хотели посмотреть TO_CHAR (и TO_DATE) в справочном руководстве по языку SQL ( docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/… )
Ответ №1:
Вы можете использовать:
where trunc(col1) = date '2019-11-29'
Однако для этого нельзя использовать индекс col1
. Таким образом, часто лучше использовать:
where col1 >= date '2019-11-29' and
col1 < date '2019-11-30'
Ответ №2:
Вы можете to_date()
или to_char()
функции. Функция Oracle/PLSQL TO_DATE
преобразует строку в дату, а TO_CHAR
функция преобразует дату в строку. TRUNC(date)
Функция возвращает дату без части времени.
select *
from myTable
where trunc(col1) = to_date('2019-11-29', 'yyyy-mm-dd');
или:
select *
from myTable
where to_char(col1, 'yyyy-mm-dd') = '2019-11-29'
Комментарии:
1. С точки зрения to_date у меня ошибка: «Неправильные аргументы col1…». С точки зрения to_char у меня ошибка: «Недопустимая функция to_char», как я могу это сделать???
2. Вы уверены, что у Col1 есть тип данных даты?
3. Я не уверен, я знаю только, что col1 имеет значения в следующем формате: 2019-11-29 11:14:00.821822
4. Ты должен убедиться. Col1 может быть Varchar, Меткой времени или Датой.
5. Я проверил, col1-это метка времени