2015-03-26 7 views
6

मैं PostgreSQL JDBC अनुकूलक का उपयोग कर रहा एक jsonb क्षेत्र में डेटा का एक समूह विस्थापित करने के लिए (postgres 9.4)।JSONb दिनांक: आंतरिक तिथियां आंतरिक रूप से?

आयात करने के बाद, दिनांक फ़ील्ड सही लग रही है लेकिन doublequotes से घिरा प्रदर्शित होते हैं। क्या यह बताने का कोई तरीका है कि क्या वे वास्तव में तारीख मूल्य के रूप में आंतरिक रूप से संग्रहीत हैं? अगर वे तार हैं, तो मुझे नहीं लगता कि रेंज लुकअप बहुत ही कुशल होंगे।

उदाहरण के लिए, एक properties jsonb क्षेत्र में एक प्रविष्टि इस तरह दिखता है:

"founded_on": "Sep 1, 2012 12:00:00 AM",

मैं अब,

SELECT CAST(properties->>'founded_on' AS DATE

और

SELECT extract('year' from cast(properties->>'founded_on' as timestamp)) खोज सकते हैं कहते हैं,

और दोनों अच्छा काम है, लेकिन मुझे मत बताओ Postgres हर बार jsonb क्षेत्र में एक स्ट्रिंग मान reparsing है या नहीं, एक तारीख के रूप में।

मैं एक सूचकांक जहां मैं तारीखों के लिए इन मूल्यों डाली बना सकते हैं, और का उपयोग करें कि खोज करने के लिए है, लेकिन यह कुछ हद तक असजीला लगता है। मैं वास्तव में जानना चाहता हूं कि संग्रहीत मूल्य एक तिथि है। पूर्णांकों और तैरता इन के रूप में, उनकी वास्तविक देशी मूल्यों, नहीं तार प्रतीत:

shares_sold": 5900000,

"latitude": 33.561467,

कोई प्रतिक्रिया अत्यधिक सराहना की।

उत्तर

12

JSON एक "तिथि" प्रकार नहीं है। JSONB प्रकार (Pg 9.4 में जोड़ा गया) मानचित्र लेकिन does not extend upon JSON primitive types. मूल्य देखा गया है कि यह क्या है, पाठ।

एक सूचकांक स्ट्रिंग गुण के साथ जोड़ा जा सकता है वर्तमान "अंग्रेजी गद्य" प्रारूप रेंज में भाग लेने के लिए सक्षम नहीं होंगे प्रश्नों क्योंकि इस तरह मूल्यों तारीखों पर सुव्यवस्थित नहीं कर रहे हैं।

सुव्यवस्थित दिनांकों भंडारण के विभिन्न तरीके, आदिम प्रकार प्रतिबंध दिया।

  • विशिष्ट ISO 8601 variation (समान समय क्षेत्र के साथ); पाठ

  • UNIX time या मिलीसेकंड के साथ "जावास्क्रिप्ट समय"; पूर्णांक

  • Julian Day ('J' date format देखें); सांख्यिक

(समानता सूचकांक जांच भी पर्वतमाला नहीं कर सकते हैं अगर इस्तेमाल किया जा सकता .. मान ठीक प्रकार से दिखाई, जो अभी भी एक सुसंगत डेटा प्रतिनिधित्व का उपयोग कर के अधीन है प्रदान की है।)

जब से अधिक एक सीमा क्वेरी को लागू करने (जेएसओएनबी/जीआईएन) इंडेक्स दिनांक मूल्यों को उचित दिनांक JSON डेटा प्रकार में परिवर्तित करता है ("तारीख" संपत्ति के लिए उपयोग किए गए पूर्णांक, संख्यात्मक, पीजी में पाठ); दूसरी तरफ नहीं।

जब मूल्यों को लाते समय एक DATE के लिए चुना प्रारूप कन्वर्ट - यह ठीक है 'के बाद से इस रेंज क्वेरी के बाद किया जाता है और मूल रूप से दिनांक या समय का समर्थन नहीं करता JSONB के बाद से' आवश्यक 'है।

+1

धन्यवाद, यह उत्तर उत्कृष्ट है। हम हर जगह unixtime का उपयोग करने जा रहे हैं। –

+1

इसके अलावा, यहां [जेएसओएन स्पेक के लिए अनुमति प्रकार] (http://rfc7159.net/rfc7159) है, अगर किसी को इसका संदर्भ देने की आवश्यकता है। –

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