2017-01-17 4 views
0

пытается получить данные между этими диапазонами дат, но продолжает бросать ошибка синтаксиса:SQL от и до диапазона дат

syntax to use near '<='2016-01-06'))

Select user_email 
from wp_users 
where ID in (
     select user_id 
     from wp_usermeta 
     where (
       wp_usermeta.meta_key = 'last_login' 
       and CAST(wp_usermeta.meta_value As DATE) >= '2000-01-06' 
       and <= '2016-01-06' 
       ) 
     ) 
+0

Также взгляните на соединения. – Strawberry

ответ

1

У вас не хватает CAST(wp_usermeta.meta_value As DATE) перед тем <= '2016-01-06'

2

Вы или думаете об использовании BETWEEN или у вас отсутствует условие для оценки вашего <=.

Try:

SELECT user_email 
FROM wp_users 
WHERE ID IN (
     SELECT user_id 
     FROM wp_usermeta 
     WHERE (
       wp_usermeta.meta_key = 'last_login' 
       AND CAST(wp_usermeta.meta_value AS DATE) >= '2000-01-06' 
       AND CAST(wp_usermeta.meta_value AS DATE) <= '2016-01-06' 
       ) 
     ) 

или

SELECT user_email 
FROM wp_users 
WHERE ID IN (
     SELECT user_id 
     FROM wp_usermeta 
     WHERE (
       wp_usermeta.meta_key = 'last_login' 
       AND CAST(wp_usermeta.meta_value AS DATE) BETWEEN '2000-01-06' 
        AND '2016-01-06' 
       ) 
     ) 
0

Вы забыли критерии до второй даты проверки

Select user_email 
 
from wp_users 
 
where ID in (
 
     select user_id 
 
     from wp_usermeta 
 
     where (
 
       wp_usermeta.meta_key = 'last_login' 
 
       and CAST(wp_usermeta.meta_value As DATE) >= '2000-01-06' 
 
       and CAST(wp_usermeta.meta_value As DATE) <= '2016-01-06' 
 
       ) 
 
     )

0

У вас есть ненужный and <=. Вы хотите, либо between или два сравнения:

Select user_email 
from wp_users u 
where ID in (select um.user_id 
      from wp_usermeta um 
      where um.meta_key = 'last_login' and 
        CAST(um.meta_value As DATE) >= '2000-01-06' and 
        CAST(um.meta_value As DATE) <= '2016-01-06' 
      ); 

Часто join s лучше, чем in. Если last_login появляется только один раз для каждого пользователя, вы можете попробовать:

Select u.user_email 
from wp_users u join 
    wp_usermeta um 
    on u.id = um.user_id 
where um.meta_key = 'last_login' and 
     CAST(um.meta_value As DATE) >= '2000-01-06' and 
     CAST(um.meta_value As DATE) <= '2016-01-06'; 

Затем, если дата хранится в виде YYYY-MM-DD, то бросок не нужен (сравнение в виде строк работы):

Select u.user_email 
from wp_users u join 
    wp_usermeta um 
    on u.id = um.user_id 
where um.meta_key = 'last_login' and 
     um.meta_value >= '2000-01-06' and 
     um.meta_value <= '2016-01-06'; 

Наконец, эта версия может воспользоваться индексом на wp_usermeta(meta_key, meta_value, user_id).

Смежные вопросы