Как реализовать условие LIKE в postgresql версии 12? - PullRequest
0 голосов
/ 05 марта 2020
Select COUNT(*) from Table_one where timestamp LIKE '%2020-03-04%' AND speed_type = 'SPEED';

Этот запрос показывает ошибку, когда я внедряю его через среду весенней загрузки, поэтому я проверил его на postgresql, и все равно он показывает ошибку.

Ошибка заключается в следующем: -

 ERROR:  operator does not exist: date ~~ unknown
LINE 1: Select COUNT(*) from table_one where timestamp LIKE '2020-0...
                                                        ^
HINT:  No operator matches the given name and argument types. You might need to add explicit type casts.
SQL state: 42883
Character: 49

Ответы [ 3 ]

2 голосов
/ 05 марта 2020

Используйте функции даты / времени! Не преобразовывайте в строку!

where timestamp >= '2020-03-04' AND
      timestamp < '2020-03-05' AND
      speed_type = 'SPEED'

Мало того, что это предотвращает ненужное преобразование типов. Но он также невосприимчив к любым настройкам интернационализации, которые могут повлиять на преобразование в строку (что может зависеть от базы данных).

Он также может использовать соответствующие индексы, которые включают timestamp. А оптимизатор обладает лучшей информацией, которая может улучшить план запросов (хотя план в этом случае, по общему признанию, прост).

0 голосов
/ 05 марта 2020

Поскольку вы сравниваете значение метки времени со значением типа строки. Итак, необходимо преобразование, например

timestamp::text LIKE '%2020-03-04%'
0 голосов
/ 05 марта 2020

Вам нужно привести ваш столбец timestamp как VARCHAR, чтобы его можно было сравнить со строкой символов:

Select COUNT(*) 
from Table_one 
where CAST(timestamp AS VARCHAR) LIKE '%2020-03-04%'
  AND speed_type = 'SPEED';

Демонстрация на dbfiddle

...