سؤال

كيف أفعل شيئًا مثل ما يلي

SELECT ADDDATE(t_invoice.last_bill_date, INTERVAL t_invoice.interval t_invoice.interval_unit) 
  FROM t_invoice

... حيث يكون العمود t_invoice.last_bill_date تاريخًا ، t_invoice.interval هو عدد صحيح و t_invoice.interval_unit هي سلسلة.

ما يعجبني في وظيفة AddDate () هو أنه إذا كتبت أ

SELECT ADDDATE('2010-01-31', INTERVAL 1 MONTH)

إنها تعيد بسهولة اليوم الأخير من فبراير-2010-02-28. لذلك يعلم أن شهر واحد يعني 28 يومًا لشهر فبراير (29 عامًا في Leap Year) ، 31 إذا كان الشهر الفردي ، 30 إذا كان شهرًا حتى شهرًا. أود الحفاظ على هذه الميزة في استفساري.

في الأساس ، أريد تحديد تاريخ الفاتورة التالية للشخص بناءً على تردد الفواتير المطلوب. هل هناك طريقة أفضل لتحقيق ذلك؟

هل كانت مفيدة؟

المحلول

SELECT t_invoice.last_bill_date +  INTERVAL 
   CASE t_invoice.interval_unit 
    WHEN 'minute' THEN t_invoice.interval 
    WHEN 'hour' THEN t_invoice.interval*60
    WHEN // etc...
    END MINUTE as col1
 FROM t_invoice

أو

SELECT 
   CASE t_invoice.interval_unit 
    WHEN 'minute' THEN t_invoice.last_bill_date +  INTERVAL t_invoice.interval MINUTE
    WHEN 'hour' THEN t_invoice.last_bill_date +  INTERVAL t_invoice.interval HOUR
    WHEN // etc...
    END as col1
 FROM t_invoice
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top