SQLite

2009-09-11 8 views
9

में डेटाटाइम मान कैसे संग्रहीत करें और प्राप्त करें मेरी तालिका में जन्मदिन फ़ील्ड है जिसमें डेटाटाइप डेटाटाइम है। मैं आज जन्मदिन वाले सभी रिकॉर्ड प्राप्त करना चाहता हूं। मैं इसे कैसे प्राप्त कर सकता हूं?SQLite

उत्तर

8

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

SELECT * FROM mytable 
WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday) 
4

SQLite दिनांकों भंडारण के लिये बहुत ही गरीब समर्थन हासिल है। आप उपरोक्त निक डी द्वारा सुझाए गए विधि का उपयोग कर सकते हैं लेकिन ध्यान रखें कि इस क्वेरी के परिणामस्वरूप पूर्ण तालिका स्कैन होगा क्योंकि SQLite में तारीखों को सही ढंग से अनुक्रमित नहीं किया गया है (वास्तव में SQLite सभी को अंतर्निहित प्रकार के रूप में दिनांकों का समर्थन नहीं करता है)।

यदि आप वास्तव में एक तेज क्वेरी करना चाहते हैं तो आपको जन्मदिन (1-31) संग्रहित करने के लिए एक अलग (अभिन्न) कॉलम जोड़ना होगा और डेटाबेस में इसके लिए एक इंडेक्स संलग्न करना होगा।

यदि आप केवल तिथियों की तुलना करना चाहते हैं तो आप एक एकल (INTEGER) कॉलम जोड़ सकते हैं जो दिनांक यूटीसी मान संग्रहीत करेगा (लेकिन यह चाल आपको व्यक्तिगत दिनांक घटकों को आसानी से खोजने की अनुमति नहीं देगी)।

गुड लक

+2

DATE या DATETIME को NUMERIC के रूप में संग्रहीत किया जाएगा (http://www.sqlite.org/datatype3.html में "2.2 एफ़िनिटी नाम उदाहरण" देखें) यूनिक्स समय के रूप में (अनुभाग "1.2 दिनांक और समय डेटाटाइप" देखें)। दिन और महीने संग्रह करना एक संभावित अनुकूलन है, एक और INTEGER कॉलम संग्रह करना अनावश्यक है। – idbrii

5

एक विशेष datetime प्रकार हमेशा मेरे लिए अनावश्यक भूमि के ऊपर तरह लग रहा था है के बाद, पूर्णांकों, तेजी से लचीला कर रहे हैं, और कम जगह का उपयोग करें।

सामान्य डेटाटाइम मानों के लिए यूनिक्स एपोक टाइमस्टैम्प का उपयोग करें। बेहद लचीला, साथ ही टाइमज़ोन (और यहां तक ​​कि कैलेंडर!) अज्ञेय के साथ काम करने में आसान है। (मैंने हाल ही में an article on using them, which I really have to plug... लिखा है)

यह कहा गया है कि, यदि आप केवल ग्रेगोरियन कैलेंडर में तिथियों में रुचि रखते हैं तो आप निम्न प्रारूप में एक बड़ा पूर्णांक का उपयोग करना चाह सकते हैं: YYYYMMDD, उदाहरण के लिए 1 9 761203. आपके लिए विशेष उपयोग भी एमएमडीडी की तरह चार अंक पूर्णांक बनाएं, 1703 — कहें जो तेजी से चयन में परिणाम प्राप्त हो गया है!

+0

ऐसा लगता है कि SQLite एक यूनिक्स समय के रूप में तारीखों को संग्रहीत कर सकता है: http://www.sqlite.org/datatype3.html ("1.2 दिनांक और समय डेटाटाइप" देखें)। तो वहां कोई बर्बाद जगह नहीं है। – idbrii

+2

YYYMMDD जैसे पूर्णांक के रूप में आपकी तिथि को संग्रहीत करने के लिए, जन्मदिनों के बारे में क्या तारीखें हैं? उसी महीने जन्मदिन के बारे में क्या? प्रत्येक दिनांक खंड को खींचने के लिए बहुत सारे मॉड/डिव ऑपरेशंस की आवश्यकता होती है। मुझे लगता है कि आप निकड के उत्तर जैसे डेटाबेस के अंतर्निहित (और अनुकूलित और पठनीय) टूल का उपयोग करना बेहतर कर देंगे। – idbrii