2016-01-13 36 views
4

我有一個表,其中有一個列日期類型order_date也許你需要一個不同的「日期樣式」設置

查詢:

INSERT INTO uni_data_temp(sale_order_item_code, 
      order_date, sale_order_item_status, tracking_number, dispatch_date, 
      user_id) VALUES ('1000932515', cast('16/05/2015' as date), 'DISPATCHED', 'UNIPAYP1958141', '2015/05/20', '4') 

當我運行此查詢提示錯誤:

ERROR: date/time field value out of range: "16/05/2015" 
SQL state: 22008 
Hint: Perhaps you need a different "datestyle" setting. 
Character: 380 

然後,我改變了查詢

INSERT INTO uni_data_temp(sale_order_item_code, 
      order_date, sale_order_item_status, tracking_number, dispatch_date, 
      user_id) VALUES ('1000932515', cast('2015/05/16' as date), 'DISPATCHED', 'UNIPAYP1958141', '2015/05/20', '4') 

它工作正常。

但我的問題是我的日期可能是任何風格(yyyy/mm/dd或dd/mm/yyyy)我怎麼能按照databse進行轉換?

任何一種日期格式轉換成系統數據庫。

謝謝

+0

你可以用'SELECT TO_CHAR(NOW(), 'YYYY/MM/DD')::日期;' –

+0

我怎麼可以把這個在我的表,我用'16/05/2015' 年,而不是現在()它仍然給錯誤:function to_char(unknown,unknown)is not unique – YAM

+1

如果日期「可能是任何風格「你運氣不好。 PG可以識別多種日期格式,但有些不明確,有些默認解釋(在你的情況下是'mm/dd/yyyy')。你應該在客戶端設置一些標準,以便所有的日期都以特定的格式輸入,然後你可以使用'to_date()'讓PG瞭解它,以防它不是ISO風格。 – Patrick

回答

2

您正在使用的日期字符串和依靠會話設置正確interprete字符串。改爲使用支持的日期文字以獨立於設置。

在PostgreSQL中(以及有關SQL標準的問題)DATE'YYYY-MM-DD'被認爲是日期文字,並且是我推薦的格式。因此,使用

INSERT INTO uni_data_temp 
    (sale_order_item_code 
    , order_date 
    , sale_order_item_status 
    , tracking_number 
    , dispatch_date 
    , user_id 
) 
VALUES 
    ('1000932515' 
    , DATE '2015-05-16' 
    , 'DISPATCHED' 
    , 'UNIPAYP1958141' 
    , DATE '2015-05-20' 
    , 4 
); 

(感謝a_horse_with_no_name指着我的PostgreSQL的正確日期文字語法。)

但是,如果你得到的日期從某個字符串,則需要應用根據格式:

TO_DATE('06/05/2015', 'DD/MM/YYYY') 
TO_DATE('05/06/2015', 'MM/DD/YYYY') 
+0

當有人說「這花費10」時,你會問「10什麼?美元?美分?歐元?」單獨的信息10是不完整的。當有人說把'01/02/2015'這個日期放在數據庫中時,你會問:「01是01日還是02月?反之亦然?」 「01/02/2015」信息本身並不完整。 DD是一天,MM是一個月,一年是YYYY。如果答案是「今年是月日」,那麼格式是「DD/MM/YYYY」。如果你的問題沒有得到答案,你不能把數據放到你的數據庫中;它是不完整的,你可能錯誤地導入了錯誤的數據;所以拒絕這樣做。 –

+1

我最喜歡寫日期,時間或時間戳文字的方法是ANSI語法:'date'2016-01-13''或'timestamp'2016-01-13 17:38:42''它具有額外的好處跨越多個(儘管不是全部)DBMS –

+0

@a_horse_with_no_name:謝謝他的信息。這也是我喜歡的方式。我知道它在Oracle中工作,但不知道PostgreSQL使用相同的語法。我在postgre中搜索日期文字,所有我發現的是沒有日期或timestamp關鍵字的字符串。 (愚蠢的是,它很容易找到,它在日期/時間函數和運算符http://www.postgresql.org/docs/8.0/static/functions-datetime.html中)。你是對的,應該這樣做。我會編輯我的答案。 –

相關問題