Postgresql

在時間戳 SELECT 上保留尾隨零

  • February 1, 2015

這就是問題所在:我正在從表中讀取帶有時間戳列的行,並且我需要確保數據庫返回具有固定寬度的時間戳。但是我遇到了 PostgreSQL 數據庫返回沒有尾隨零的時間戳的情況。

我正在處理的表包含UUIDVarchar和。我知道我可以使用此處解釋的“to_char” ,但我真正想要的是一種告訴 PostgreSQL 始終以給定格式返回時間戳的方法,而不考慮零。Smallint``Timestamp

這是我得到的列的輸出範例Timestamp,其中包含一個修剪過的時間戳:

"2014-09-26 17:17:45.999"
"2014-11-26 17:17:46"
"2015-03-26 17:17:46.001"
"2015-04-26 17:17:46.002"
"2015-05-26 17:17:46.003"

這自然會給我帶來問題,因為從數據庫中讀取的函式期望獲得給定格式的時間戳。

有沒有辦法讓 PostgreSQL 在查詢中總是返回一個固定寬度的時間戳SELECT * FROM [table]

下面你會看到欄位是如何創建的:

"created_UTC" timestamp NOT NULL DEFAULT (now() AT TIME ZONE 'UTC'),
"last_modified_UTC" timestamp NOT NULL DEFAULT (now() AT TIME ZONE 'UTC')

經過一番反复,我設法弄清楚實際發生了什麼以及如何解決它。

從數據庫讀取的函式期望獲得給定格式的時間戳對我來說,這意味著給定函式期望這些是文本參數,而不是時間戳。否則它會滿足於時間戳…… – dezso Jan 27 at 20:22

這很有幫助,因為它讓我明白,如果您要求 JDBC for PostgreSQL 將時間戳作為字元串返回,它會在最後自動修剪零。

例子:

ResultSet rs = {get rows from database}
rs.getString(TIMESTAMP_COLUMN);

將返回一個可能縮短(修剪)的字元串,其中最後一個零被刪除。

儘管:

ResultSet rs = {get rows from database}
rs.getTimestamp(TIMESTAMP_COLUMN);

實際上將返回一個 Java Timestamp 對象,沒有修剪問題。

這是出乎意料的行為,我不確定修剪字元串背後的原因是什麼,但我至少弄清楚了問題出在哪里以及如何解決它。

非常感謝您的幫助。噓!

在我看來,您需要將 Timestamp 列設置為CURRENT_TIMESTAMP(3). 這會將列設置為將時間返回到您正在尋找的三位數精度。

引用自:https://dba.stackexchange.com/questions/90222