2009-03-30 12 views
31

मुझे डेटाबेस में एक वर्ष (उदाहरण: 1 9 88, 1 99 0 आदि) डालने की आवश्यकता है। जब मैंने दिनांक या डेटाटाइम डेटा प्रकार का उपयोग किया, तो यह त्रुटियां दिखा रहा है। मुझे किस डेटाटाइप का उपयोग करना चाहिए।एसक्यूएल डेटा टाइप - एक वर्ष कैसे स्टोर करें?

उत्तर

24

यदि आपको डेटाबेस में एक वर्ष स्टोर करने की आवश्यकता है, तो आप या तो एक इंटीजर डेटाटाइप का उपयोग करना चाहते हैं (यदि आप केवल मृत पर सेट हैं तो आप डेटटाइम का उपयोग भी कर सकते हैं वर्ष संग्रहित करना) या डेटटाइम डेटाटाइप (जिसमें उस तारीख को संग्रहीत करना शामिल होगा जो मूल रूप से 1/1/19 9 0 00:00:00 प्रारूप में है)।

+7

** आलसी मत बनो और "केवल int का उपयोग करें"। ** अपने डेटा प्रकार को सही ढंग से आकार दें, दो बाइट int एक बेहतर विकल्प है।4 बाइट्स में 4 अंकों के वर्षों को संग्रहीत करके, आप बस डिस्क स्थान की तुलना में अधिक संसाधन बर्बाद कर रहे हैं। इस कॉलम के लिए आपके सिस्टम को दो बार कैश मेमोरी का उपयोग करके बोझ किया जाएगा, आईओ डेटा की मात्रा दोगुनी हो जाएगी। यह कोई ब्रेनर नहीं है, देखें: http://dba.stackexchange.com/q/4968 –

0

बस एक साल, और कुछ नहीं? क्यों एक साधारण पूर्णांक का उपयोग नहीं करते?

+0

ओह भगवान, सामान्य ज्ञान से – peter

+4

अरे! आप चीजों को इतना आसान बनाने की कोशिश क्यों कर रहे हैं? हम एसओ सवालों से बाहर चलेगा! –

1

यदि आपको स्टोर करने की आवश्यकता है तो पूर्णांक का उपयोग करें वर्ष है। यदि आप सोचते हैं कि इस कॉलम

+0

धन्यवाद, मेरी गलती – peter

25

नियमित 4 बाइट आईएनटी बड़ा रास्ता है, अंतरिक्ष की बर्बादी है!

आप यह नहीं कहते कि आप किस डेटाबेस का उपयोग कर रहे हैं, इसलिए मैं एक विशिष्ट डेटाटाइप की अनुशंसा नहीं कर सकता। हर कोई "पूर्णांक का उपयोग" कह रहा है, लेकिन अधिकांश डेटाबेस 4 बाइट्स पर पूर्णांक स्टोर करते हैं, जो आपको आवश्यकतानुसार अधिक है। आपको दो बाइट पूर्णांक (SQL सर्वर पर छोटा) का उपयोग करना चाहिए, जो अंतरिक्ष को बेहतर बनाएगा।

+1

अधिकतर नहीं, एक int का उपयोग करके अंतरिक्ष बर्बाद करना एक छोटा डेटा प्रकार का उपयोग करने के लिए बेहतर है, क्योंकि अधिकांश आधुनिक प्रोसेसर अधिक कुशल प्रसंस्करण 4 होते हैं छोटे डेटा प्रकारों की तुलना में बाइट इंट्स (32 बिट)। – Ender

+0

@ एन्डर, आप वास्तव में इन मानों के साथ गणित नहीं कर रहे हैं, यह एक स्टोर और लुकअप प्रक्रिया से अधिक है। यदि आप छोटे होते हैं तो आप राम में अधिक मूल्यों को स्टोर करने में सक्षम होंगे, यदि आप छोटे हैं, तो डिस्क से अधिक मूल्यों को पढ़ने में सक्षम होंगे। मुझे आपके विचारों का समर्थन करने वाले कोई भी लेख नहीं मिल सका। http://dba.stackexchange.com/q/4968 –

+1

सभी प्रोग्राम अंत में मशीन कोड को संकलित करते हैं और संख्या रजिस्टरों को लोड की जाती है। आधुनिक सीपीयू आर्किटेक्चर में सभी रजिस्ट्रार 32 बिट या 64 बिट हैं। इसलिए आपकी आरडीबीएमएस प्रणाली को आपकी क्वेरी में शर्तों को पूरा करने के लिए तुलना करने के लिए उन नंबरों को रजिस्टरों में रखना होगा। और छोटे int और छोटे int के मामले में, इसे हर बार एक रूपांतरण करना होता है, जो समय लेने वाला होता है। आप मेरे बिंदु या आपके बिंदु का समर्थन करने वाला एक आधिकारिक लेख नहीं ढूंढ सकते हैं क्योंकि यह आमतौर पर सीपीयू और आईओ के बीच एक व्यापार बंद होता है क्योंकि int का उपयोग सूचकांक आकार में वृद्धि करेगा और अधिक आईओ – Ender

9

अरे, आप वर्ष() MySQL में डेटाटाइप का उपयोग कर सकते हैं यह दो अंकों या चार अंकों के प्रारूप में उपलब्ध है।

नोट: मान चार अंकों प्रारूप में अनुमति दी: 1901 2155. करने के लिए मान दो अंकों प्रारूप में अनुमति दी: 70 69, साल का प्रतिनिधित्व करने के लिए 1970 से 2069

2

के लिए MSSQL में एक "वर्ष" भंडारण आदर्श निर्भर करेगा आप इसके साथ क्या कर रहे हैं और उस "वर्ष" का अर्थ आपके आवेदन और डेटाबेस के लिए क्या होगा। ऐसा कहा जा रहा है कि यहां कुछ बातें हैं। एमएसएसक्यूएल में 2012 तक साल के लिए "डेटा टाइप" नहीं है। मैं SMALLINT का उपयोग करने की ओर झुकता हूं क्योंकि यह केवल 2 बाइट्स है (आपको 4 बाइट्स में से 2 की बचत करता है)। आपकी सीमा यह है कि आपके पास 32767 से अधिक वर्ष (SQL सर्वर 2008R2 के रूप में) नहीं हो सकता है। मुझे सच में नहीं लगता कि एसक्यूएल अब दस हजार साल के विकल्प का डेटाबेस होगा, अब अकेले 32767 को छोड़ दें। आप एमएसएसएलएल में वर्ष() फ़ंक्शन के रूप में आईएनटी को डेटा प्रकार "DATE" को एक आईएनटी में परिवर्तित कर सकते हैं। जैसे मैंने कहा, यह इस बात पर निर्भर करता है कि आपको डेटा कहां मिल रहा है और यह कहां जा रहा है, लेकिन SMALLINT बस ठीक होना चाहिए। INT अधिक होगा ... जब तक आपके ऊपर उल्लेखित कोई अन्य कारण नहीं है या यदि कोड आवश्यकताओं को आईएनटी फॉर्म (जैसे मौजूदा एप्लिकेशन के साथ एकीकृत करना) में इसकी आवश्यकता है। सबसे अधिक संभावना SMALLINT बस ठीक होना चाहिए।

0

संग्रहण इस मुद्दे का केवल एक हिस्सा हो सकता है। एक प्रश्न में इस मूल्य का उपयोग कैसे किया जाएगा?

क्या इसकी तुलना किसी अन्य दिनांक-समय डेटा प्रकार से की जा सकती है, या क्या सभी संबंधित पंक्तियों में संख्यात्मक मूल्य भी होंगे?

आप आवश्यकताओं में बदलाव से कैसे निपटेंगे? साल को एक छोटे से समय के टुकड़े के साथ बदलने के अनुरोध पर आप कितनी आसानी से प्रतिक्रिया दे सकते हैं? यानी वे अब क्वार्टर से टूटना चाहते हैं?

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

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