Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

अंतराल मान के रूप में कॉलम नाम के साथ DATE_ADD का उपयोग करना

अपना परिणाम प्राप्त करना आसान नहीं होगा - चूंकि आप इसे साधारण 1 Year के रूप में संग्रहीत कर रहे हैं या इसी के समान। यह नहीं है इसे INTERVAL . में गतिशील रूप से उपयोग करने की अनुमति है निर्माण - MySQL सिंटैक्स मांगें कि आप अंतराल मात्रा और प्रकार दोनों को इंगित करेंगे।

हालांकि, इस मामले को सुलझाने के लिए एक तरह की तरकीब है:

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

-जैसा कि आप देख सकते हैं, यह प्रश्न इस तथ्य पर निर्भर करता है, कि मात्रा हमेशा पहले जाती है (इसलिए CAST इसे ठीक से निकालेगा, इसलिए, इसके बाद अंतराल की लंबाई प्राप्त करने के लिए इसका उपयोग किया जा सकता है)। लेकिन किसी भी मामले में, आपको सब संभव को फिर से गिनना होगा CASE में अंतराल प्रकार खंड

एक और अच्छा विचार होगा - अपनी अवधि को एकीकृत रूप में संग्रहीत करना (उदाहरण के लिए, हमेशा दिनों में) - इसलिए आप प्रत्येक पंक्ति के लिए केवल एक नंबर संग्रहीत करेंगे (इस प्रकार, 1 सप्ताह =7 दिन, आदि)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:अल्पविराम से अलग की गई सूची को कई पंक्तियों में विभाजित करें

  2. मैं mysql में सेट किए गए डिफ़ॉल्ट सर्वर कैरेक्टर का पता कैसे लगा सकता हूं?

  3. 30 यादृच्छिक पंक्तियों का चयन करें जहां योग राशि =x

  4. MySQL में कुल कार्यों को कैसे संयोजित करें?

  5. MySQL में एक ऑटोइनक्रिकमेंट फ़ील्ड के साथ एक पंक्ति की प्रतिलिपि कैसे करें और उसी तालिका में कैसे डालें?