अपना परिणाम प्राप्त करना आसान नहीं होगा - चूंकि आप इसे साधारण 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 दिन, आदि)