2014-06-19 5 views
19

मैं एक चार्टर वर्री कॉलम को DATE को डालने की कोशिश कर रहा हूं लेकिन मुझे इस तरह के दिनांक प्रारूप की आवश्यकता है: डीडी/एमएम/वाई वाई वाई। मैं निम्नलिखित SQL का उपयोग करता हूं:पोस्टग्रेएसक्यूएल: कास्ट स्ट्रिंग टू डेट डीडी/एमएम/वाईवायवाई

ALTER TABLE test ALTER COLUMN date TYPE DATE using to_date(date, 'DD/MM/YYYY'); 

परिणाम इस तरह की तारीख है: YYYY-MM-DD।

मैं डीडी/एमएम/वाई वाई वाई प्रारूप कैसे प्राप्त कर सकता हूं?

बहुत पहले से धन्यवाद!

थॉमस

उत्तर

42

एक DATE स्तंभ एक प्रारूप नहीं है। आप इसके लिए एक प्रारूप निर्दिष्ट नहीं कर सकते हैं।

आप DateStyle का उपयोग कर सकते हैं यह नियंत्रित करने के लिए कि PostgreSQL तिथियों को कैसे उत्सर्जित करता है, लेकिन यह वैश्विक और थोड़ा सीमित है।

इसके बजाय, आपको to_char का उपयोग उस दिनांक को प्रारूपित करने के लिए करना चाहिए जब आप इसे पूछताछ करते हैं, या क्लाइंट एप्लिकेशन में इसे प्रारूपित करते हैं। पसंद:

SELECT to_char("date", 'DD/MM/YYYY') FROM mytable; 

उदा।

regress=> SELECT to_char(DATE '2014-04-01', 'DD/MM/YYYY'); 
    to_char 
------------ 
01/04/2014 
(1 row) 
+0

ठीक है बहुत बहुत धन्यवाद! मैं यह सुनिश्चित करना चाहता था कि यह to_date() फ़ंक्शन के माध्यम से संभव नहीं था। – wiltomap

+0

@ विल्टोमैप यह नहीं है, क्योंकि सभी 'to_date' एक स्ट्रिंग से दिनांक बनाते हैं। तिथि में आंतरिक रूप से प्रारूप नहीं है, यह सिर्फ एक संख्या है। –

+0

क्या इस तरह डीबी के माध्यम से खोज करने का कोई तरीका है? उदाहरण के लिए: 'my_table आदेश से (DATE my_column) desc' से to_char (DATE my_column,' dd/MM/YYYY ') का चयन करें? – antjanus

0

https://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-OUTPUT

दिनांक/समय प्रकार के उत्पादन में प्रारूप चार शैलियों में से एक आईएसओ 8601 के लिए सेट किया जा सकता है, एसक्यूएल (Ingres), पारंपरिक Postgres (यूनिक्स तारीख प्रारूप), या जर्मन। डिफ़ॉल्ट आईएसओ प्रारूप है।

इसलिए, खास प्रारूप postgres दिनांक समय उत्पादन, जैसे के साथ नियंत्रित किया जा सकता है:

t=# select now(); 
       now 
------------------------------- 
2017-11-29 09:15:25.348342+00 
(1 row) 

t=# set datestyle to DMY, SQL; 
SET 
t=# select now(); 
       now 
------------------------------- 
29/11/2017 09:15:31.28477 UTC 
(1 row) 

t=# select now()::date; 
    now 
------------ 
29/11/2017 
(1 row) 

मन है कि के रूप में क्रेग उसके जवाब में mentionned, बदलते datestyle भी (और पहली बारी में) जिस तरह से बदल जाएगा पोस्टग्रेस पार्स की तारीख।

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