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

SQL:Di mana antara dua tanggal tanpa tahun?

Cara terbaik untuk memikirkan masalah ini adalah dengan mengonversi tanggal Anda ke angka antara 0 dan 365 yang sesuai dengan hari dalam setahun. Kemudian cukup memilih tanggal di mana perbedaan ini kurang dari 14 memberi Anda jendela dua minggu.

Itu akan rusak pada awal atau akhir tahun. Tapi aritmatika modular sederhana memberi Anda jawabannya.

Untungnya, MySQL memiliki DAYOFYEAR(date) , jadi tidak terlalu rumit:

SELECT * FROM tbl t
WHERE 
  MOD(DAYOFYEAR(currdate) - DAYOFYEAR(t.the_date) + 365, 365) <= 14
  OR MOD(DAYOFYEAR(t.the_date) - DAYOFYEAR(currdate) + 365, 365) <= 14

+ 365 tambahan itu diperlukan karena MOD MySQL akan mengembalikan angka negatif.

Jawaban ini tidak memperhitungkan tahun kabisat dengan benar. Jika tahun ini bukan tahun kabisat dan tanggalnya berada dalam 14 hari dari akhir tahun, maka Anda akan melewatkan satu hari di bulan Januari yang seharusnya Anda sertakan. Jika Anda peduli tentang itu, maka Anda harus mengganti 365 dengan [the number of days in the year - 1 ].



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Memuat Modul MySQLdb dan pip install MySQLdb

  2. Menutup koneksi aktif menggunakan RMySQL

  3. MySQL melewatkan baris pertama

  4. Format variabel MySQL untuk daftar nilai NOT IN

  5. Bagaimana cara menyimpan alamat yang kompatibel dengan IPv6 dalam database relasional