Postgres (V11.3, 64bit, Windows) усекает конечные нули для отметок времени.Поэтому, если я вставлю метку времени '2019-06-12 12: 37: 07.880' в таблицу и прочту ее обратно, когда текст postgres вернет '2019-06-12 12: 37: 07.88'.
Table date_test:
CREATE TABLE public.date_test (
id SERIAL,
"timestamp" TIMESTAMP WITHOUT TIME ZONE NOT NULL,
CONSTRAINT pkey_date_test PRIMARY KEY(id)
)
Команда SQL при вставке данных:
INSERT INTO date_test (timestamp) VALUES( '2019-06-12 12:37:07.880' )
Команда SQL для извлечения данных:
SELECT dt.timestamp ::TEXT FROM date_test dt
returns '2019-06-12 12:37:07.88'
Считаете ли вы это ошибкой или функцией?
Мой реальныйпроблема заключается в следующем: я выполняю запросы из программы на C ++, и мне нужно преобразовать данные, возвращенные из базы данных, в соответствующие типы данных.Поскольку протокол основывается на тексте, все, что я читаю из базы данных, представляет собой простой текст.При разборе меток времени я сначала токенизирую строку, а затем конвертирую каждый токен в целое число.А поскольку миллисекундная часть усекается, последний токен равен «88» вместо «880», а преобразование «88» дает другое значение, которое преобразует «880» в целое число.