2012-01-04 22 views
8

पोस्टग्रेज़ में, क्या टाइमस्टैम्प के लिए डिफ़ॉल्ट स्वरूप मास्क को बदलना संभव है?, क्या आप सत्र या वैश्विक स्तर पर टाइमस्टैम्प के लिए डिफ़ॉल्ट स्वरूपण सेट कर सकते हैं?

अभी वापस

2012-01-03 20:27:53.611489 

रूप में आता है मैं इस तरह मिनट के लिए संकल्प करना चाहते हैं:

2012-01-03 20:27 

मैं जानता हूँ कि मैं to_char() as साथ अलग-अलग स्तंभों पर ऐसा कर सकते हैं या एक substr() द्वारा के साथ नीचे छीन लिया प्राप्त करने वाला ऐप, लेकिन शुरुआत में इसे सही रूप से स्वरूपित करने से बहुत सारे काम बच जाएंगे और बहुत सारी त्रुटियां कम हो जाएंगी।

+0

प्रयोग कर रहे हैं? –

+0

php में प्रोटोटाइप, लगभग 6 mo –

+0

में node.js पर जाने के बाद यह पोस्टग्रेस सेटिंग नहीं, एक PHP सेटिंग बदलने के लिए होगा। –

उत्तर

4

पोस्टग्रेज़ में, set datestyle विकल्प का उपयोग करके डेटा प्रारूप के लिए डिफ़ॉल्ट प्रारूप मास्क बदल सकता है; उपलब्ध विकल्प here (8.5.2 देखें। दिनांक/समय आउटपुट)।

दुर्भाग्यवश, सभी उपलब्ध विकल्पों में सेकंड की संख्या शामिल है - इसलिए आपको क्वेरी या एप्लिकेशन कोड (यदि लागू हो) में उन्हें फिर से सुधारने की आवश्यकता होगी।

+0

है जो आपको मिला है - धन्यवाद –

3

to_char() स्ट्रिंग अक्षर बनाने के लिए उपयोग किया जाता है। आप एक अलग टाइमस्टैम्प मूल्य, उपयोग करना चाहते हैं: ::timestamp जोड़कर timestamp without time zone को

to_timestamp('2012-01-03 20:27:53.611489', 'YYYY-MM-DD HH24:MI') 

कास्ट:

date_trunc('minute', now()) 

एक इनपुट के लिए मुखौटा आप उपयोग कर सकते हैं।

मेरे ज्ञान के लिए, PostgreSQL में सेटिंग नहीं है जो डिफ़ॉल्ट रूप से टाइमस्टैम्प अक्षरों से सेकंड ट्रिम करेगा।

+0

धन्यवाद, लेकिन यह समस्या टाइमस्टैम्प का मूल्य नहीं है बल्कि चयनित होने पर इसकी स्ट्रिंग प्रस्तुति है। इस ऐप में, उपयोगकर्ता को प्रस्तुत टाइमस्टैम्प हमेशा निकटतम मिनट तक गोल होता है - डेटा के साथ नहीं, प्रदर्शन के साथ करना। प्रत्येक चयन के प्रत्येक कॉलम पर 'to_char()' के बिना ऐसा करने का तरीका ढूंढ रहा था। –

+1

@ccyoung: यदि आप ** निकटतम मिनट में ** ** ** करना चाहते हैं, तो 'to_char()' connot आपको या तो मदद नहीं करता है। आप केवल इसके साथ छेड़छाड़ कर सकते हैं। वैसे भी, यह ** क्लाइंट ** के लिए नौकरी की तरह लगता है, डेटाबेस के लिए नहीं। a_horse_with_no_name सही रास्ते पर है। –

+0

सैद्धांतिक रूप से मुझे यकीन है कि आप शायद सही हैं, लेकिन अभ्यास के मामले में लगभग हमेशा SQL स्वरूपण और अंकगणित एसक्यूएल में डाल दिया जाता है क्योंकि यह जावास्क्रिप्ट या PHP से बेहतर है। –

8

पोस्टग्रेएसक्यूएल में, टाइमस्टैम्प का स्वरूपण भंडारण से स्वतंत्र है। एक ही जवाब to_char का उपयोग करें और आप इस तरह, जैसे ही आप इसकी आवश्यकता पर की जरूरत है जो कुछ भी प्रारूप करने के लिए टाइमस्टैम्प स्वरूपित करने के लिए है:

बदलें PostgreSQL टाइमस्टैम्प:

select to_char(current_timestamp, 'yyyy-MM-dd HH24:MI:SS.MS'); 

select to_timestamp('2012-10-11 12:13:14.123', 
    'yyyy-MM-dd HH24:MI:SS.MS')::timestamp; 

लेकिन आप डिफ़ॉल्ट स्वरूपण सेट करना होगा अगर विश्व स्तर पर प्रारूप:

, आपके समय क्षेत्र पर एक नजर डालें एक SQL क्वेरी के रूप में इस चलाएँ:

show timezone 
Result: "US/Eastern" 

तो जब आप CURRENT_TIMESTAMP बाहर प्रिंट कर रहे हैं, तो आप इस देखें:

select current_timestamp 
Result: 2012-10-23 20:58:35.422282-04 

-04 अंत में यूटीसी के लिए अपना समय क्षेत्र सापेक्ष है।

set timezone = 'US/Pacific' 

तब:: आप के साथ अपने समय क्षेत्र बदलने के कर सकते हैं

select current_timestamp 
Result: 2012-10-23 18:00:38.773296-07 

तो वहाँ -07 दिखाई देता है तो हम इसका मतलब है प्रशांत यूटीसी से 7 घंटे की दूरी पर है। मैं उस भयानक टाइमज़ोन को कैसे दूर कर सकता हूं? एक तरह से सिर्फ एक मेज बनाने के लिए है, यह समय क्षेत्र के बिना एक टाइमस्टैम्प करने के लिए चूक:

CREATE TABLE worse_than_fail_table 
(
    mykey   INT unique not null, 
    fail_date  TIMESTAMP not null 
); 

तो अगर आपको लगता है कि मेज पर एक टाइमस्टैम्प जोड़ सकते हैं और से यह

select fail_date from worse_than_fail_table 
Result: 2012-10-23 21:09:39.335146 

Yay, पर कोई समय क्षेत्र चुनें समाप्त। लेकिन आप डिफ़ॉल्ट रूप से टाइमस्टैम्प कैसे दिखाते हैं, इस पर अधिक नियंत्रण चाहते हैं!

CREATE TABLE moo (
    key  int PRIMARY KEY, 
    boo  text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM') 
); 

यह एक पाठ क्षेत्र जो आप कैसे यह डिफ़ॉल्ट रूप से दिखाई देता है जब आप एक select somecolumns from sometable कर पर अधिक नियंत्रण देता है: आप कुछ इस तरह कर सकता है। आप टाइमस्टैम्प के एक स्ट्रिंग डाल सकता नोटिस:

select current_timestamp::timestamp 
Result: 2012-10-23 21:18:05.107047 

आप इस तरह समय क्षेत्र से छुटकारा पा सकते:

select current_timestamp at time zone 'UTC' 
Result: "2012-10-24 01:40:10.543251" 

select '2012-10-11 12:13:14.56789'::timestamp 
Result: 2012-10-11 12:13:14.56789 

आप जो समय क्षेत्र को हटा timestamp करने के लिए एक CURRENT_TIMESTAMP डाली सकता है

लेकिन यदि आप वास्तव में टाइमज़ोन वापस चाहते हैं तो आप यह कर सकते हैं:

select current_timestamp::timestamp with time zone 
Result: 2012-10-23 21:20:21.256478-04 

आप बाहर झटका कर सकते हैं कि आप क्या निकालने के साथ हैं:

SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); 
Result: 20 

और यह कुरूपता:

SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'EST'; 
Result: 2001-02-16 20:38:40 
जो क्लाइंट अनुप्रयोग
संबंधित मुद्दे

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