MYSQL - हटाएं अगर - mysql

मेरे पास एक स्क्रिप्ट है जो प्रतिदिन एक टेक्स्ट फ़ाइल अपडेट करती है। यह वर्तमान महीने से पहले चरण के रूप में सभी रिकॉर्ड हटा देता है।

DELETE FROM salesdata
WHERE year(calendar_date) = year(now())
AND month(calendar_date) = month(now());

महीने के पहले 3 दिनों में, पाठ फ़ाइलपिछले महीने से डेटा शामिल है। (जिस तरह से टेक्स्ट फ़ाइल और बिक्री आदेश उत्पन्न होते हैं, पोस्ट पोस्ट होने के कुछ दिनों के लिए बदल सकते हैं या हटा दिए जा सकते हैं। इसके लिए खाते का सबसे आसान तरीका सिर्फ रोज़ाना ताज़ा करना है)।

मैं ऐसा कुछ करना चाहता हूं:

IF DAY(calendar_date) <= 3
DELETE FROM salesdata
WHERE year(calendar_date) = year(now())
AND month(calendar_date) = month(now()) - 1
OR month(calendar_date) = month(now());
ELSE
DELETE FROM salesdata
WHERE year(calendar_date) = year(now())
AND month(calendar_date) = month(now());

क्या मैं इसे MYSQL में कर सकता हूं? मैं आईएफ और सीएएसई बयान देख रहा हूं लेकिन मैंने ऐसा कुछ भी नहीं देखा जो इसका समर्थन करता है।

उत्तर:

जवाब के लिए 0 № 1

तुमको क्यों चाहिए if? यही कारण है कि वहाँ है where खंड...

DELETE ...
WHERE (year/month stuff AND (DAY(calendar_date) <= 3))
OR (..other stuff..)

जवाब के लिए 0 № 2

आप निम्न क्वेरी आज़मा सकते हैं:

DELETE FROM salesdata
where
year(calendar_date) = year(now())
AND (
(DAY(calendar_date)<=3 and month(calendar_date) = month(now())- 1)
OR month(calendar_date) = month(now())
)

जवाब के लिए 0 № 3

IF कथन केवल संग्रहित प्रक्रियाओं में उपयोग किया जा सकता है, प्रश्नों में नहीं। एक प्रश्न में, आपको स्थिति को इस स्थिति में रखना होगा WHERE खंड, और आप इसका उपयोग कर सकते हैं IF() समारोह।

DELETE FROM salesdata
WHERE YEAR(calendar_date) = YEAR(now())
AND IF(DAY(NOW()) <= 3,
MONTH(calendar_date) IN (MONTH(NOW(), MONTH(NOW()) - 1),
MONTH(calendar_date) = MONTH(NOW()))

यह साल की शुरुआत के साथ अच्छी तरह से सौदा नहीं करता है, हालांकि, साल और महीने की तुलना करने के बजाय, पूरी तिथियों की तुलना करना और अंकगणित तिथि का उपयोग करना बेहतर होगा।

DELETE FROM salesdata
WHERE calendar_date >=
DATE_FORMAT("%Y-%m-01",
IF(DAY(NOW()) <= 3, NOW(), DATE_SUB(NOW(), INTERVAL 1 MONTH)))

संबंधित सवाल
सबसे लोकप्रिय