PostgreSQL의 TIMESTAMP 값이 반올림됨
8914 단어 PostgreSQLtech
TIMESTAMP 초 필드의 정밀도는 소수점 이하 0~6자리 범위에서 지정할 수 있습니다.
INSERT INTO foo
VALUES (1, TIMESTAMP '2021-12-31 23:59:59')
, (2, TIMESTAMP '2021-12-31 23:59:59.9')
, (3, TIMESTAMP '2021-12-31 23:59:59.99')
, (4, TIMESTAMP '2021-12-31 23:59:59.999')
, (5, TIMESTAMP '2021-12-31 23:59:59.9999')
, (6, TIMESTAMP '2021-12-31 23:59:59.99999')
, (7, TIMESTAMP '2021-12-31 23:59:59.999999')
, (8, TIMESTAMP '2021-12-31 23:59:59.9999999');
# SELECT * FROM foo;
id | foo_time
----+----------------------------
1 | 2021-12-31 23:59:59
2 | 2021-12-31 23:59:59.9
3 | 2021-12-31 23:59:59.99
4 | 2021-12-31 23:59:59.999
5 | 2021-12-31 23:59:59.9999
6 | 2021-12-31 23:59:59.99999
7 | 2021-12-31 23:59:59.999999
8 | 2022-01-01 00:00:00 <- 四捨五入されて日付がかわる
(8 rows)
다음, 발견될 때까지 필기TIMESTAMP 열이 있는 테이블 준비하기
CREATE TABLE foo
(
id INTEGER,
foo_time TIMESTAMP
);
LocalDate 및 Local TimeMAX를 사용하여 TIMESTAMP 열의 값을 만들고 INSERT를 진행합니다.
LocalDate 및 Local TimeMAX를 사용하여 TIMESTAMP 열의 값을 생성합니다.
제작 준비
2022-01-01 23:59:59.999999999
의 기록.O/R Mapper는 JOQ를 사용합니다.
val date = LocalDate.of(2022, 1, 1)
dslContext
.insertInto(FOO, FOO.ID, FOO.FOO_TIME)
.values(1, date.atTime(LocalTime.MAX))
.execute()
예상과 다른 INSERT 결과를 반환합니다.
INSERT 결과를 확인하기 위해 SELECT를 시도해보면
2022-01-01 23:59:59.99999999
가 아니라 다음날2022-01-02 00:00:00
이다.# SELECT * FROM foo;
id | foo_time
----+---------------------
1 | 2022-01-02 00:00:00
(1 row)
Reference
이 문제에 관하여(PostgreSQL의 TIMESTAMP 값이 반올림됨), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kentama/articles/c52204d6892fc0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)