कार्यों को परिभाषित करने के बारे में कैसे FIRST_WDOM()
(सप्ताह/माह का कार्य दिवस) और LAST_WDOM()
<की शैली में कोड>LAST_DAY ()
?
DELIMITER //
CREATE FUNCTION first_wdom (d DATETIME) -- First work/week day of month
RETURNS DATE DETERMINISTIC
BEGIN
DECLARE first_dom DATE;
SET first_dom = DATE_FORMAT(d, '%Y-%m-01');
RETURN first_dom + INTERVAL (CASE DAYOFWEEK(first_dom)
WHEN 1 THEN 1
WHEN 7 THEN 2
ELSE 0
END) DAY;
END //
CREATE FUNCTION last_wdom (d DATETIME) -- Last work/week day of month
RETURNS DATE DETERMINISTIC
BEGIN
DECLARE last_dom DATE;
SET last_dom = LAST_DAY(d);
RETURN last_dom - INTERVAL (CASE DAYOFWEEK(last_dom)
WHEN 1 THEN 2
WHEN 7 THEN 1
ELSE 0
END) DAY;
END //
DELIMITER ;
mysql> SELECT FIRST_WDOM('2011-05-10'), LAST_WDOM('2011-05-10');
+--------------------------+-------------------------+
| FIRST_WDOM('2011-05-10') | LAST_WDOM('2011-05-10') |
+--------------------------+-------------------------+
| 2011-05-02 | 2011-05-31 |
+--------------------------+-------------------------+
1 row in set (0.01 sec)
यह केवल ic3b3rg का उत्तर
, और मानता है कि शनिवार और रविवार आपके सप्ताहांत के दिन हैं। मैं इनपुट प्रकार के रूप में DATE के बजाय DATETIME का उपयोग करता हूं, जब पास करते समय ट्रंकेशन चेतावनियों से बचने के लिए, कहें, NOW()
।