在 SQL 中,可以使用 WEEKDAY()
函數(shù)與其他日期函數(shù)結(jié)合來(lái)執(zhí)行更復(fù)雜的日期操作。以下是一些示例,說(shuō)明如何將 WEEKDAY()
與其他日期函數(shù)結(jié)合使用:
假設(shè)我們有一個(gè)名為 orders
的表,其中包含一個(gè)名為 order_date
的列,我們希望找到每個(gè)訂單所屬周的第一天(星期一)。
SELECT
order_id,
order_date,
WEEKDAY(order_date) AS week_start_day_of_week
FROM
orders;
但是,上述查詢并沒(méi)有真正地將日期調(diào)整為一周的第一天。為了實(shí)現(xiàn)這一點(diǎn),我們可以使用 DATE_ADD()
和 WEEKDAY()
函數(shù)結(jié)合:
SELECT
order_id,
order_date,
DATE_ADD(order_date, INTERVAL WEEKDAY(order_date) - 1 DAY) AS week_start
FROM
orders;
假設(shè)我們想要計(jì)算兩個(gè)日期之間有多少完整的周。
SELECT
DATEDIFF(week, start_date, end_date) AS number_of_weeks
FROM
(VALUES ('2023-01-01'), ('2023-01-08')) AS t(start_date, end_date);
但是,上述查詢返回的是兩個(gè)日期之間的天數(shù)差除以7的結(jié)果,它可能不會(huì)返回整數(shù)周數(shù)。為了確保返回的是完整的周數(shù),我們可以使用 FLOOR()
函數(shù):
SELECT
FLOOR(DATEDIFF(day, start_date, end_date) / 7.0) AS number_of_weeks
FROM
(VALUES ('2023-01-01'), ('2023-01-08')) AS t(start_date, end_date);
注意:在上述示例中,我們使用了 DATEDIFF()
函數(shù)來(lái)計(jì)算兩個(gè)日期之間的天數(shù)差,并使用 FLOOR()
函數(shù)將結(jié)果除以7并向下取整,從而得到完整的周數(shù)。