समस्या:
आपके पास timestamp
. प्रकार के दो कॉलम हैं और आप उनके बीच के अंतर की गणना करना चाहते हैं।
उदाहरण:
travel
तालिका, तीन कॉलम हैं:id
, departure
, और arrival
. आप arrival
. के बीच अंतर की गणना करना चाहेंगे और departure
।
travel
तालिका इस तरह दिखती है:
आईडी | प्रस्थान | आगमन |
---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 |
समाधान 1 (दिनों में अंतर):
SELECT id, departure, arrival, JULIANDAY(arrival) - JULIANDAY(departure) AS difference FROM travel;
नतीजा यह है:
आईडी | प्रस्थान | आगमन | अंतर |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 10.8125 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 40.778125000186265 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 0.18437499972060323 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 368.2256944444962 |
चर्चा:
SQLite में टाइमस्टैम्प के बीच अंतर की गणना करने के लिए, JULIANDAY()
का उपयोग करें दोनों टाइमस्टैम्प के लिए कार्य करें, फिर एक को दूसरे से घटाएं। इस तरह आपको दिनों में फर्क नजर आने लगता है। अंतर का पूर्णांक भाग पूरे दिनों की संख्या है, और दशमलव भाग आंशिक दिन का प्रतिनिधित्व करता है।
JULIANDAY()
फ़ंक्शन 24 नवंबर, 4714 ई.पू. को दोपहर ग्रीनविच मीन टाइम के बाद से दिनों की संख्या लौटाता है। आप इस फ़ंक्शन के बारे में दस्तावेज़ीकरण में अधिक पढ़ सकते हैं।
समाधान 2 (सेकंड में अंतर):
SELECT id, departure, arrival, ROUND((JULIANDAY(arrival) - JULIANDAY(departure)) * 86400) AS difference FROM travel;
नतीजा यह है:
आईडी | प्रस्थान | आगमन | अंतर |
---|---|---|---|
1 | 2018-03-25 12:00:00 | 2018-04-05 07:30:00 | 934200 |
2 | 2019-09-12 15:50:00 | 2019-10-23 10:30:30 | 3523230 |
3 | 2018-07-14 16:15:00 | 2018-07-14 20:40:30 | 15930 |
4 | 2018-01-05 08:35:00 | 2019-01-08 14:00:00 | 31814700 |
चर्चा:
यदि आप सेकंड में टाइमस्टैम्प के बीच अंतर की गणना करना चाहते हैं, तो दिनों में दशमलव अंतर को एक दिन में सेकंड की संख्या से गुणा करें, जो 24 * 60 * 60 = 86400
के बराबर है। , या एक दिन में घंटों की संख्या, एक घंटे में मिनटों की संख्या और एक मिनट में सेकंड की संख्या का गुणनफल। चूंकि पूर्णांकन त्रुटियों के कारण दिनों में अंतर के लिए दशमलव भाग 100% सटीक नहीं होते हैं, इसलिए आपको एक गैर-शून्य दशमलव भाग मिल सकता है। ROUND()
. का उपयोग करके परिणाम को निकटतम पूर्णांक में पूर्णांकित करना फ़ंक्शन, समस्या को ठीक करता है।
इसी तरह, आप मिनटों या घंटों में अंतर की गणना कर सकते हैं। बस * 86400 to * 3600
में बदलें (मिनट) या * 60
(घंटे)।