Postgresql
在時間戳 SELECT 上保留尾隨零
這就是問題所在:我正在從表中讀取帶有時間戳列的行,並且我需要確保數據庫返回具有固定寬度的時間戳。但是我遇到了 PostgreSQL 數據庫返回沒有尾隨零的時間戳的情況。
我正在處理的表包含
UUID
、Varchar
和。我知道我可以使用此處解釋的“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)
. 這會將列設置為將時間返回到您正在尋找的三位數精度。