[英]How to get the query result for “not in between these two dates”
如何獲取“不在這兩個日期之間”的查詢結果
查詢1:
SELECT *
FROM log
WHERE employee_id = 2
AND date BETWEEN '2013-12-01' and '2013-12-08'
當我運行查詢時,我得到了結果
2013-12-1
2013-12-5
但是如何得到結果“除了上述兩個以外的所有日期”。 或者,如何編寫查詢以獲得下面的結果?
2013-12-2
2013-12-3
2013-12-4
2013-12-6
2013-12-7
2013-12-8
怎么樣
select *
from log
WHERE employee_id =2
AND NOT date between '2013-12-01' and '2013-12-08'
你也可以這樣做
AND ( date < '2013-12-01' OR date > '2013-12-08')
但是,如果您的date
列的時間戳不是午夜時間,則需要更加思考范圍。 你需要
AND ( date < '2013-12-01' AND date >= ('2013-12-08' + INTERVAL 1 DAY)
獲取適當日期范圍內的時間范圍。
SELECT '2013-12-2'
UNION
SELECT '2013-12-3'
etc
有一個SQL標准運算符, NOT BETWEEN
,您可以使用:
select *
from log
WHERE employee_id = 2 and
date not between '2013-12-01' and '2013-12-08';
這相當於:
select *
from log
WHERE employee_id = 2 and
not (date between '2013-12-01' and '2013-12-08');
但是,后者在邏輯上是兩個操作(計算“日期之間”部分然后否定結果)。 第一個是一個操作。
順便說一句,如果date
確實存儲為datetime
類型,請務必小心。 時間組件可以拋棄相等操作並使`之間返回意外結果。
“select * from log WHERE employee_id = 2 AND date between between 2013-12-01'和'2013-12-08'”
前面的查詢返回'2013-10-1'和'2013-12-5',您正在尋找
2013-12-2
2013-12-3
2013-12-4
2013-12-6
2013-12-7
2013-12-8
但是你的問題是how to get the query result not in between the date
。 這有道理嗎?
無論如何根據你的預期結果。 我想你在找
select * from log WHERE employee_id =2 AND date != '2013-12-01' and date != '2013-12-08'
要么
SELECT * FROM another_tab WHERE date NOT IN (
select date from log WHERE employee_id =2 AND date BETWEEN '2013-12-01' and '2013-12-08'
)
我認為你想要指定用戶沒有記錄活動的所有日期。 以下解決方案基於另一個答案: 在兩個日期之間顯示所有日期數據; 如果特定日期不存在行,則在所有列中顯示零
;with d(date) as (
select CAST('20131201' AS datetime)
union all
select date+1
from d
where date < CAST('20131208' AS datetime)
)
select d.date CDate
from d
left join [Log] l
on l.[Date] = d.date AND l.employee_id=2
WHERE l.employee_id IS NULL
order by d.date
OPTION (MAXRECURSION 0)
對不起,這是針對SQL Server而不是MySQL,我沒有看到MySQL標簽......無論如何,我認為這是你所期望的,並且會有類似的MySQL解決方案。
編輯
MySQL中似乎沒有WITH子句:-(。如果您確定每天都有其他日志記錄(其他用戶操作,系統事件等),那么以下命令可能對您有用:
SELECT DISTINCT date FROM log l1
WHERE l1.date BETWEEN '2013-12-01' and '2013-12-08'
AND NOT EXISTS(SELECT * FROM log l2 WHERE
l2.date = l1.date AND l2.employee_id=2)
我沒有測試它,因為我目前沒有安裝MySQL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.