2009-08-13 6 views
8

वहाँ लेखन की तुलना में एक आसान तरीका है:() curdate (अंतराल WEEKDAY (curdate()) दिन)MySQL: मैं कैसे जान सकता हूँ 'पिछले सोमवार की तारीख' (प्रदर्शन अंक)

date_sub चयन LastMonday के रूप में
दोहरी

+0

मुझे लगता है कि है कि के रूप में आप करेंगे के रूप में सरल है उसे ले लो। – Jambobond

उत्तर

23

यदि आप एक प्राचीन MySQL का उपयोग नहीं कर रहे हैं, तो आप इसे संग्रहीत फ़ंक्शन में लपेट सकते हैं।

CREATE FUNCTION `LastMonday`() RETURNS DATETIME  
    RETURN DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) ; 

और फिर फोन

select LastMonday() as LastMonday 

अद्यतन:

आप प्रदर्शन समस्या हो रही है, तो आप एक सत्र वैरिएबल के मान बच सकते हैं। इस तरह आप सुनिश्चित कर सकते हैं कि इसकी गणना केवल एक बार की जाएगी।

set @LastMonday=LastMonday(); 
select @Lastmonday; 

(इस सरल प्रश्न में यह निश्चित रूप से कोई फर्क नहीं पड़ता ...)

+0

यह ठीक है कि मैंने अब तक लंबी दिखने वाली तारीख की गणनाओं से "बचाया" था ... मैं संभावित ओवरहेड के बारे में चिंतित था/... – lexu

+0

मैंने बाद में हमारे कोडबेस पर अपना "प्रदर्शन अपडेट" सुझाव जोड़ा है। यह एक बड़ा अंतर बनाता है, किसी भी तरह से मुझे उम्मीद है कि समारोह केवल एक बार बुलाया जाएगा .. (लेकिन यह पता लगाने के लिए अनुकूलक कैसे है कि मैं मिलीसेकंड में समय वापस नहीं कर रहा हूं ..) – lexu

+0

यहां की चाल यह है कि मूल्य एक बार गणना की जाती है और फिर मैन्युअल रूप से कैश किया। आप कोशिश कर सकते हैं कि अनुकूलक क्या करता है। यह भी कैश करने के लिए पर्याप्त स्मार्ट हो सकता है, लेकिन आप वास्तव में इस पर भरोसा नहीं कर सकते हैं। –

-1

इस प्रयास करें:

-- 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 
+0

मेरे लिए यह न तो सरल है, न ही प्रश्न में कोड से अधिक प्रदर्शनकारी है? .. लेकिन मैं संकेत ले जाऊंगा और प्रश्न शीर्षक फिर से वाक्यांश दूंगा! – lexu

+0

मेरे लिए, यह अगले सोमवार को नहीं बल्कि उसके बाद सोमवार को आउटपुट करता है। – DanM7

0
SET @dateCurrent = CURDATE(); 
SET @dateCurrentDayInWeek = DAYOFWEEK(@dateCurrent) - 2; 
SET @dateLastMonday = DATE_ADD(@dateCurrent, INTERVAL [email protected] DAY); 

SELECT @dateLastMonday; 
संबंधित मुद्दे