我需要計算兩個日期之間特定日期的數量(例如星期三&星期四)。計算兩個日期之間的特定星期幾
我知道時間函數和所有相關的函數,但我不知道如何在這種情況下使用它們。
這個問題在兩個解決方案中解決了,但是看起來我不能選擇展位解決方案。 謝謝Andrius Naruševičius和Kickstart你的啓示:d
我需要計算兩個日期之間特定日期的數量(例如星期三&星期四)。計算兩個日期之間的特定星期幾
我知道時間函數和所有相關的函數,但我不知道如何在這種情況下使用它們。
這個問題在兩個解決方案中解決了,但是看起來我不能選擇展位解決方案。 謝謝Andrius Naruševičius和Kickstart你的啓示:d
採取和調整的方法從here
@S = start date
@E = end date, not inclusive
@full_weeks = floor((@[email protected])/7)
@days = (@[email protected]) - @full_weeks*7 OR (@[email protected]) % 7
SELECT
@full_weeks*1 -- saturday
+IF(@days >= 1 AND weekday(S+0)=5, 1, 0)
+IF(@days >= 2 AND weekday(S+1)=5, 1, 0)
+IF(@days >= 3 AND weekday(S+2)=5, 1, 0)
+IF(@days >= 4 AND weekday(S+3)=5, 1, 0)
+IF(@days >= 5 AND weekday(S+4)=5, 1, 0)
+IF(@days >= 6 AND weekday(S+5)=5, 1, 0)
完成。
SELECT語句做的另一種方法: -
SELECT DAYNAME(DATE_ADD(@StartDate, INTERVAL (Units.i + Tens.i * 10 + Hundreds.i * 100) DAY)) AS aDayOfWeek, COUNT(*)
FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS Units
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS Tens
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS Hundreds
WHERE DATE_ADD(@StartDate, INTERVAL (Units.i + Tens.i * 10 + Hundreds.i * 100) DAY) <= @EndDate
GROUP BY aDayOfWeek
這將日期高達1000相隔幾天,但易於擴展它日期範圍較大的工作。
它正在做的是生成一系列數字(從0開始),並將它們添加到結果爲< =的開始日期到結束日期。然後獲取每個人的日期名稱並獲得每個人的人數。
它的工作很好,只需要一些調整我的問題......謝謝兄弟=)) – Smiley
我認爲使用日曆表更簡單。例如,爲了找出2013年3月份的星期三和星期四,你會做這樣的事情。
select count(*)
from calendar
where cal_date between '2013-03-01' and '2013-03-31'
and day_of_week in ('Wed', 'Thu')
count
--
8
要擴展它以計算星期日,只需將「Sun」添加到IN子句中即可。 (雖然我不得不說這在我看來是一種奇怪的事情。)
select count(*)
from calendar
where cal_date between '2013-03-01' and '2013-03-31'
and day_of_week in ('Wed', 'Thu', 'Sun')
count
--
13
這裏的code for a calendar table in PostgreSQL。您將不得不跳過一些環節來爲MySQL進行翻譯,因爲MySQL不強制執行CHECK約束。
不幸的是我不想使用任何表,只是一個單一的查詢。但它可以做到當你結合這個解決方案http://stackoverflow.com/questions/9295616/how-to-get-list-of-dates-between-two-dates-in-mysql-select-query?lq= 1 ....感謝您的想法:) – Smiley
這對你有用嗎? http://stackoverflow.com/questions/2546053/mysql-difference-between-two-timestamps-in-days – alpera
谷歌第一 - .-第一個結果做你想要的 - http://stackoverflow.com/questions/9757919/ count-days-between-dates-excluded-weekends-mysql-only –
@alpera恕我直言,datediff計算日期之間有多少天。我只需要特殊的日子 – Smiley