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

Menggunakan DATE_ADD dengan Nama Kolom sebagai Nilai Interval

Tidak akan mudah untuk mendapatkan hasil Anda - karena Anda menyimpannya sebagai 1 Year biasa atau serupa. Itu tidak diizinkan untuk menggunakannya secara dinamis di INTERVAL konstruksi - sintaks MySQL permintaan bahwa Anda akan menunjukkan kuantitas dan jenis interval.

Namun, ada semacam trik untuk menyelesaikan masalah ini:

SELECT 
    product_name, 
    start_date,
    expiry_period,
    @num:=CAST(expiry_period AS UNSIGNED),
    @p  :=SUBSTR(expiry_period, CHAR_LENGTH(@num)+2),
    CASE
      WHEN @p='Year' THEN DATE_ADD(start_date, INTERVAL @num YEAR)
      WHEN @p='Month' THEN DATE_ADD(start_date, INTERVAL @num MONTH)
      WHEN @p='Day' THEN DATE_ADD(start_date, INTERVAL @num DAY)
      WHEN @p='Week' THEN DATE_ADD(start_date, INTERVAL @num WEEK)
    END AS end_date
FROM
    tbl_products

-seperti yang Anda lihat, kueri ini bergantung pada fakta, bahwa kuantitas selalu menjadi yang pertama (jadi CAST akan mengekstraknya dengan tepat, oleh karena itu, dapat digunakan untuk mendapatkan panjang interval setelah ini). Tapi bagaimanapun juga, Anda harus menceritakan semua kemungkinan jenis interval dalam CASE klausa

Ide bagus lainnya adalah - untuk menyimpan periode Anda dalam bentuk terpadu (misalnya, selalu dalam hari) - jadi Anda hanya akan menyimpan satu angka untuk setiap baris (dengan demikian, 1 minggu=7 hari, dll.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permutasi MySQL

  2. Alternatif untuk tabel sementara MySQL di Oracle

  3. Cara mengatasi ERROR 1060:Duplikat nama kolom menggunakan Tampilan -> Buat Tampilan

  4. Menggunakan pemicu MySQL untuk mencatat semua perubahan tabel ke tabel sekunder

  5. MySQL VARCHAR Panjang dan UTF-8