Нужно знать, если между и вроде можно использовать вместе или что-то лучше в SQL

StackOverflow https://stackoverflow.com/questions/4251209

  •  27-09-2019
  •  | 
  •  

Вопрос

Вот мой запрос:

SELECT count(*) 
  FROM table_testcase_execution 
 WHERE campaign_session_id = any(SELECT campaign_session_id 
                                   FROM table_campaign_session 
                                  WHERE campaign_session_name = 'sitename') 
   AND timestamp BETWEEN "1288929643485" AND "1289010305536"

Это работает просто хорошо, проблема в том, что я должен использовать LIKE На них, потому что они содержат 3 дополнительных цифры (так что это временная метка плюс 3 цифры).

Поэтому я использую strtotime В PHP и попытка сопоставить их в базе данных, но они содержат дополнительные 3 цифры. Есть ли способ, которым я могу повторить этот SQL или добавить LIKE Пункт для каждого из этих временных метров?

      "1288929643485" AND "1289010305536"

Что-то типа

 SELECT count(*) 
   FROM table_testcase_execution 
  WHERE campaign_session_id = any(SELECT campaign_session_id 
                                    FROM table_campaign_session 
                                   WHERE campaign_session_name = 'sitename') 
    AND timestamp between LIKE "1288929643%" AND "1289010305%" 
Это было полезно?

Решение

Предполагая, что 3 дополнительных цифры могут варьироваться от 000 до 999, тогда вы можете сделать что-то подобное:

select count(*) from table_testcase_execution
where campaign_session_id = any(
    SELECT campaign_session_id
    FROM table_campaign_session
    WHERE campaign_session_name = 'sitename')
AND timestamp >= "1288929643000" AND timestamp <= "1289010305999"

Это наряду с индексом в timestamp Столбец должен дать вам хорошую производительность.

Другие советы

Поскольку временные метки в вашем запросе являются строки, не могли бы вы не обрезать нежелательные три цифры с SUBSTRING()?

select count(*) 
from table_testcase_execution 
where campaign_session_id = any(SELECT campaign_session_id FROM table_campaign_session WHERE campaign_session_name = 'sitename') 
AND timestamp between SUBSTRING(@timestamp1, -3) AND SUBSTRING(@timestamp2, -3)

(Предполагая, что @ timestamp1 и @ timestamp2 - соответствующие значения времени времени, прилагаемые к запросу ...)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top