欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql日期加上工作日

夏志豪2年前11瀏覽0評論

MySQL作為一種常用的關系型數據庫管理系統,其強大的日期處理功能在實際應用中十分方便。在某些情況下,我們需要對日期進行加減運算,并且需要排除掉所有的周末和節假日,這時我們可以使用MySQL的工作日方法來實現。

-- 創建日歷表
CREATE TABLE calendar(
date_field DATE PRIMARY KEY,
is_weekend TINYINT(1) DEFAULT 0,
is_holiday TINYINT(1) DEFAULT 0
);
-- 填充日歷數據,包括周末和節假日
INSERT INTO calendar VALUES
('2021-04-12',0,0), ('2021-04-11',1,0), ('2021-04-10',1,0), 
('2021-04-09',0,0), ('2021-04-08',0,0), ('2021-04-07',0,0), 
('2021-04-06',0,0), ('2021-04-05',1,1);

在上面的代碼中,我們首先創建了一個日歷表,該表包含日期、是否是周末以及是否是節假日三個字段。接著我們填充了表中的數據,包括了2021年4月5日至2021年4月12日的日期以及這些日期是否是周末或節假日。

-- 創建工作日函數
DELIMITER $$
CREATE FUNCTION fn_add_workday(start_date DATE, days INT)
RETURNS DATE
DETERMINISTIC
BEGIN
DECLARE cnt INT DEFAULT 0;
DECLARE temp_date DATE DEFAULT DATE(start_date);
WHILE cnt< days DO
SET temp_date = DATE_ADD(temp_date, INTERVAL 1 DAY);
IF NOT EXISTS(SELECT * FROM calendar WHERE date_field = temp_date AND is_weekend = 0 AND is_holiday = 0) THEN
SET days = days+1;
END IF;
SET cnt = cnt + 1;
END WHILE;
RETURN temp_date;
END$$
DELIMITER ;

接下來,我們創建了一個名為fn_add_workday的函數,該函數用于計算起始日期之后的工作日。在函數內部,我們定義了兩個變量cnt和temp_date,分別表示累計天數和暫存日期。接著,我們使用while循環遍歷所有工作日,一旦遇到周末或節假日,則累加“天數”并繼續進行循環。最后,函數返回計算后的日期。

使用該函數時,我們可以按照以下方式進行調用:

-- 調用函數獲取2019年5月1日之后的第10個工作日
SELECT fn_add_workday('2021-04-05',10); -- 計算結果為 '2021-04-19'

通過上述調用方式,我們可以方便地獲取起始日期之后的工作日,而不必手工排除周末和節假日。