Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah ada cara untuk mendapatkan hari kerja Pertama dan Terakhir dalam sebulan?

Bagaimana dengan mendefinisikan fungsi FIRST_WDOM() (minggu/hari kerja dalam sebulan) dan LAST_WDOM() dengan gaya 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)

Ini hanyalah adaptasi dari jawaban ic3b3rg , dan menganggap bahwa Sabtu dan Minggu adalah hari akhir pekan Anda. Saya menggunakan DATETIME, daripada DATE, sebagai tipe input untuk menghindari peringatan pemotongan saat meneruskan, katakanlah, NOW() .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolom tidak dikenal saat menggunakan alias mysql

  2. PHP MYSQL:pilih instan + sisipkan

  3. Bagaimana cara memindahkan lalu menghapus bidang di MySQL

  4. Kesalahan fatal yang dapat ditangkap:Objek kelas mysqli_stmt tidak dapat dikonversi ke string

  5. Bagaimana cara Memasukkan Dataframe Panda Besar ke tabel MySQL dengan Pernyataan Sisipan Paralel?