2010-10-18 19 views
7

मुझे अपने MySQL चयन कथन में किसी तारीख से हफ्तों की गणना करने की आवश्यकता है। तालिकाओं में से एक में एक तिथि कॉलम है, और मुझे गणना करने की आवश्यकता है कि तिथि कितनी हफ्तों दूर है।MySQL: किसी विशिष्ट दिनांक से सप्ताहों की गणना कैसे करें?

SELECT EventDate, (calculation) AS WeeksOut FROM Events; 

उदाहरण:

  • 6 दिन दूर, सप्ताह बाहर = 0
  • 7 दिन दूर, सप्ताह बाहर = 1
  • 13 दिन दूर, सप्ताह बाहर = 1
  • 14 दिन दूर, सप्ताह बाहर = 2
+0

आंशिक सप्ताहों के लिए आप क्या करना चाहते हैं? उदाहरण के लिए: 3.2857 सप्ताह 3 सप्ताह, 4 सप्ताह या बीच में कुछ होना चाहिए? –

+0

हां, इसे निकटतम पूरे सप्ताह – Andrew

उत्तर

17

DATEDIFF function का उपयोग करें:

ROUND(DATEDIFF(end_date, start_date)/7, 0) AS weeksout 

WEEKS के साथ समस्या यह है कि यह 1 जनवरी से अधिक की तारीखों के लिए सही परिणाम नहीं लौटाएगा।

0ROUND फ़ंक्शन में उपयोग करने के लिए दशमलव स्थानों की संख्या है।

+1

+1 पर गोला जाना चाहिए नए साल के मुद्दे पर अच्छा बिंदु, उस बारे में सोचा नहीं था ... –

+0

प्लस वन लेकिन क्या आप बेहतर स्पष्टीकरण के लिए दस्तावेज़ में लिंक जोड़ सकते हैं। 7 के बाद 0 क्यों? –

+1

@JohnMax: 0. –

3

यहाँ यह करने के लिए एक आसान तरीका है:

SELECT EventDate, (week(EventDate) - week(curdate())) AS WeeksOut FROM Events; 

उदाहरण:

mysql> select week('2010-11-18') - week ('2010-10-18'); 
+------------------------------------------+ 
| week('2010-11-18') - week ('2010-10-18') | 
+------------------------------------------+ 
|          4 | 
+------------------------------------------+ 
1 row in set (0.00 sec) 

एक अन्य विकल्प 7 से दिनों में अंतराल और भाग कर की गणना है:

SELECT EventDate, datediff(EventDate,curdate())/7 AS WeeksOut FROM Events; 

उदाहरण:

mysql> select datediff('2010-11-18' , '2010-10-18')/7; 
+-------------------------------------------+ 
| datediff('2010-11-18' , '2010-10-18')/7 | 
+-------------------------------------------+ 
|         4.4286 | 
+-------------------------------------------+ 
1 row in set (0.00 sec) 
+0

के बारे में जानकारी जोड़ा गया मेरी तरफ से अच्छा स्पष्टीकरण +1 – w3uiguru

2

पूरे "नए साल" मुद्दे को पाने के लिए और आप अभी भी WEEK() का उपयोग करना चाहते हैं, मुझे निम्न विधि काफी प्रभावी मिली।

SELECT 
    YEAR(end_date)*52+WEEK(end_date) 
    - YEAR(start_date)*52 - WEEK(start_date) as weeks_out 
FROM 
    events; 

इस विधि (के रूप में DATEDIFF विधि के विपरीत) के साथ अंतर यह है कि यह सप्ताह के साथ गठबंधन किया है। तो आज (जो सोमवार है) और पिछले शुक्रवार 1 इस विधि का उपयोग कर वापस आएगा, लेकिन 0DATEDIFF विधि

संबंधित मुद्दे