मुझे लगता है कि यह 2 चीजों में से एक के कारण हो सकता है:
- आपके SQL सर्वर और MySQL इंस्टेंस के बीच सप्ताह के पहले दिन के रूप में क्या वर्गीकृत किया जाता है।
- SQL सर्वर और MySQL के बीच सप्ताहों की गणना कैसे की जाती है
आपकी दी गई तारीख 2012-09-01
शनिवार को पड़ता है, जो सप्ताह के शुरुआती दिन को रद्द करता प्रतीत होता है, जो आमतौर पर रविवार या सोमवार होता है।
MySQL का डिफ़ॉल्ट प्रारंभ दिन होता है:0 (Sunday)
सप्ताह के प्रारंभ में अपने SQL सर्वर का पता लगाने के लिए आप @ का उपयोग कर सकते हैं। @DATEFIRST इसे चलाकर:
select @@DATEFIRST -- default US English = 7 (Sunday)
अधिक सटीक मान प्राप्त करने के लिए आप अपनी गणना को सप्ताह के बजाय दिनों पर काम करने के लिए बदल सकते हैं और 7 से विभाजित कर सकते हैं, जिसे आप अपनी इच्छानुसार गोल कर सकते हैं:
MySQL:SQL Fiddle Demo
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.5714 |
SQL सर्वर:SQL Fiddle Demo :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 108.571428 |
यदि आप अपने पिछले परिणाम से मेल खाना चाहते हैं या इसे एक अतिरिक्त सप्ताहांत के रूप में गिनना चाहते हैं, तो आप इसे ऊपर या नीचे गोल कर सकते हैं।
SQL सर्वर यह उदाहरण बेला जहां मैंने दिनांक सीमा को 2 दिन, शनिवार और रविवार को बदल दिया है:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |
जहां MySQL में समान मान केवल एक सप्ताह के रूप में पूरे 7 दिनों की गणना करते हैं जैसा कि में दिखाया गया है। यह डेमो फिडेल :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 0 |
यह केवल तभी होता है जब पूरे 7 दिन बीत जाते हैं, जैसा कि आप इस डेमो में देख सकते हैं, आपको 1 का परिणाम मिलता है। बेला :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1
| NOOFWEEKENDS1 |
|---------------|
| 1 |