2013-11-15 58 views
2

有沒有辦法使用埃塞俄比亞日期格式在PostgreSQL數據庫中存儲日期?我試圖存儲2月29日或30日,但它會引發錯誤,因爲在Julian日曆中沒有這樣的事情。任何投入?Postgresql埃塞俄比亞日期格式

+2

我不知道PostgreSQL的答案(因此這是一個評論,而不是答案),但是......大多數DBMS以獨立於使用的特定日曆的規範形式存儲DATE和TIME和TIMESTAMP數據。在語言環境規則的指導下(缺省爲當前語言環境),值從字符串轉換爲規範或從規範轉換爲字符串。我認爲你的問題應該是(1)PostgreSQL是否支持埃塞俄比亞的日期,(2)需要哪些區域設置才能這樣做,(3)你能控制每個區域(這樣你就可以同時顯示埃塞俄比亞和朱利安了)。 –

+0

@JonathanLeffler:我可以證實這是Postgres。現代內部格式Postgres自1970年以來是一種[8個字節的整數,用於計算微秒數](http://www.postgresql.org/docs/current/interactive/datatype-datetime.html)。這是100%獨立於任何區域,時區或格式。你需要一個埃塞俄比亞的語言環境,接受2月30日的字符串文字(我不知道是否有)。然後將內部值轉換爲客戶端請求的格式並返回。 –

回答

1

我不知道,我會告訴你一些新的東西,但...

數據庫是由程序使用或通過接口,我從來沒有看到所使用的最終用戶在控制檯PSQL數據庫。

如果您正在開發一個應用程序,它必須在特定的日曆中顯示日期,您可以在PostgreSQL中存儲日期TIMESTAMP。所有使用日期的操作都將在數據庫中正常工作但是您必須手動在應用程序中實現從TIMESTAMP到字符串表示的轉換,反之亦然。如果這對於您的應用程序來說是最重要的,那麼您會這樣做。

所有必須返回日期的查詢,您將通過轉換寫入DOUBLE PRECISION例如

SELECT EXTRACT(EPOCH FROM timestamp_field) 

這會返回代表數字格式的時間戳的DOUBLE PRECISION值。

在你使用內置的功能to_timestamp從數值演示文稿轉換在TIMESTAMP查詢所有日期參數:

update table_name set 
    timestamp_fileld = to_timestamp(1384852375.46666) 

另一個解決辦法是寫psql的功能,對於您直接在查詢做到這一點,但無論如何,您需要處理查詢中每個輸入/輸出的日期字段。