Как выбрать дату из столбца метки времени в Oracle SQL Developer?

#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-это метка времени