В PostgreSQL форматирование отметок времени не зависит от хранилища. Один из ответов - использовать to_char
и отформатировать временную метку в любом нужном вам формате в тот момент, когда вам это нужно, например:
select to_char(current_timestamp, 'yyyy-MM-dd HH24:MI:SS.MS');
select to_timestamp('2012-10-11 12:13:14.123',
'yyyy-MM-dd HH24:MI:SS.MS')::timestamp;
Но если вы должны установить форматирование по умолчанию:
Глобально изменить формат отметки времени postgresql:
Посмотрите на часовой пояс, запустите его как SQL-запрос:
show timezone
Result: "US/Eastern"
Итак, когда вы печатаете current_timestamp, вы видите это:
select current_timestamp
Result: 2012-10-23 20:58:35.422282-04
-04
в конце - ваш часовой пояс относительно UTC. Вы можете изменить часовой пояс с помощью:
set timezone = 'US/Pacific'
Тогда:
select current_timestamp
Result: 2012-10-23 18:00:38.773296-07
Итак, обратите внимание на -07
, это означает, что мы в Тихом океане на расстоянии 7 часов от UTC. Как мне убрать этот неприглядный часовой пояс? Один из способов - просто создать таблицу. По умолчанию используется временная метка без часового пояса:
CREATE TABLE worse_than_fail_table
(
mykey INT unique not null,
fail_date TIMESTAMP not null
);
Затем, если вы добавите метку времени к этой таблице и выберите из нее
select fail_date from worse_than_fail_table
Result: 2012-10-23 21:09:39.335146
ууу, нет часового пояса на конце. Но вы хотите больше контроля над тем, как отметка времени отображается по умолчанию! Вы можете сделать что-то вроде этого:
CREATE TABLE moo (
key int PRIMARY KEY,
boo text NOT NULL DEFAULT TO_CHAR(CURRENT_TIMESTAMP,'YYYYMM')
);
Это текстовое поле, которое дает вам больше контроля над тем, как оно отображается по умолчанию, когда вы делаете select somecolumns from sometable
. Обратите внимание, что вы можете привести строку к метке времени:
select '2012-10-11 12:13:14.56789'::timestamp
Result: 2012-10-11 12:13:14.56789
Вы можете привести current_timestamp к timestamp
, который удалит часовой пояс:
select current_timestamp::timestamp
Result: 2012-10-23 21:18:05.107047
Вы можете избавиться от часового пояса, как это:
select current_timestamp at time zone 'UTC'
Result: "2012-10-24 01:40:10.543251"
Но если вы действительно хотите вернуть часовой пояс, вы можете сделать это:
select current_timestamp::timestamp with time zone
Result: 2012-10-23 21:20:21.256478-04
Вы можете извлечь то, что вы хотите с экстрактом:
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 20
И это чудовище:
SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'EST';
Result: 2001-02-16 20:38:40