[英]sql from and to date range
試圖獲取這些日期范圍之間的數據,但不斷拋出語法錯誤:
'<='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'
)
)
您正在考慮使用BETWEEN
或者您缺少<=
評估的條件。
嘗試:
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'
)
)
您在<= '2016-01-06'
之前缺少CAST(wp_usermeta.meta_value As DATE)
您在第二次日期檢查之前忘記了條件
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' ) )
您有一個不必要的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)
上的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.