वहाँ लेखन की तुलना में एक आसान तरीका है:() curdate (अंतराल WEEKDAY (curdate()) दिन)MySQL: मैं कैसे जान सकता हूँ 'पिछले सोमवार की तारीख' (प्रदर्शन अंक)
date_sub चयन LastMonday के रूप में
दोहरी
वहाँ लेखन की तुलना में एक आसान तरीका है:() curdate (अंतराल WEEKDAY (curdate()) दिन)MySQL: मैं कैसे जान सकता हूँ 'पिछले सोमवार की तारीख' (प्रदर्शन अंक)
date_sub चयन LastMonday के रूप में
दोहरी
यदि आप एक प्राचीन MySQL का उपयोग नहीं कर रहे हैं, तो आप इसे संग्रहीत फ़ंक्शन में लपेट सकते हैं।
CREATE FUNCTION `LastMonday`() RETURNS DATETIME
RETURN DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) ;
और फिर फोन
select LastMonday() as LastMonday
अद्यतन:
आप प्रदर्शन समस्या हो रही है, तो आप एक सत्र वैरिएबल के मान बच सकते हैं। इस तरह आप सुनिश्चित कर सकते हैं कि इसकी गणना केवल एक बार की जाएगी।
set @LastMonday=LastMonday();
select @Lastmonday;
(इस सरल प्रश्न में यह निश्चित रूप से कोई फर्क नहीं पड़ता ...)
यह ठीक है कि मैंने अब तक लंबी दिखने वाली तारीख की गणनाओं से "बचाया" था ... मैं संभावित ओवरहेड के बारे में चिंतित था/... – lexu
मैंने बाद में हमारे कोडबेस पर अपना "प्रदर्शन अपडेट" सुझाव जोड़ा है। यह एक बड़ा अंतर बनाता है, किसी भी तरह से मुझे उम्मीद है कि समारोह केवल एक बार बुलाया जाएगा .. (लेकिन यह पता लगाने के लिए अनुकूलक कैसे है कि मैं मिलीसेकंड में समय वापस नहीं कर रहा हूं ..) – lexu
यहां की चाल यह है कि मूल्य एक बार गणना की जाती है और फिर मैन्युअल रूप से कैश किया। आप कोशिश कर सकते हैं कि अनुकूलक क्या करता है। यह भी कैश करने के लिए पर्याप्त स्मार्ट हो सकता है, लेकिन आप वास्तव में इस पर भरोसा नहीं कर सकते हैं। –
इस प्रयास करें:
-- Today is 05 April 2013
-- Get Last Monday from MySQL
SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 7) % 7), '%Y-%m-%d') last_monday;
-- Output
last_monday
-------------
2013-04-29
SET @dateCurrent = CURDATE();
SET @dateCurrentDayInWeek = DAYOFWEEK(@dateCurrent) - 2;
SET @dateLastMonday = DATE_ADD(@dateCurrent, INTERVAL [email protected] DAY);
SELECT @dateLastMonday;
मुझे लगता है कि है कि के रूप में आप करेंगे के रूप में सरल है उसे ले लो। – Jambobond