Как вставить значения, когда некоторые столбцы являются временными метками? - PullRequest
0 голосов
/ 16 октября 2018

У меня есть следующий SQL-оператор:

CREATE TABLE account (
user_id serial primary key,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(50) NOT NULL,
email VARCHAR (355) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
);

Я хочу вставить свою первую строку:

INSERT INTO account VALUES (
1, 'usernamehere', 'password123', 'admin@yahoo.com');

Что я должен ввести в качестве значений для столбца меток времени созданного_последовательности и last_login

Ответы [ 4 ]

0 голосов
/ 16 октября 2018

Существуют различные способы указать действительный литерал метки времени .

Я предпочитаю литералы ANSI SQL, например:

timestamp '2018-10-15 18:49:10'

, в котором всегда используется формат меток времени ISO (то есть гггг-мм-дд и 24-часовая нотация).

В качестве альтернативы, в Postgres вы также можете привести строку, которая задает значение в формате ISO, к отметке времени: '2018-10-15 18:49:10'::timestamp

Если вы предпочитаете другие форматы, вы можете использовать to_timestamp смаска формата, например:

to_timestamp('25.08.2018 21:34:10', 'dd.mm.yyyy hh24:mi:ss');

Чтобы получить текущую дату и время, вы можете использовать current_timestamp (это стандартный SQL) или now() (который специфичен для Postgres).


Не связано, но: вы не должны предоставлять значение для столбца user_id, поскольку оно генерируется автоматически, и, указав значение вручную, вы заставляете базовую последовательность не синхронизироватьсясо вставленными значениями.

Поэтому вы должны использовать:

INSERT INTO account 
  (username, password, email, created_on )
VALUES 
  ('usernamehere', 'password123', 'admin@yahoo.com', current_timestamp);

В качестве альтернативы вы могли бы указать столбец user_id, но вместо этого использовать ключевое слово default:

INSERT INTO account 
  (user_id, username, password, email, created_on )
VALUES 
  (DEFAULT, 'usernamehere', 'password123', 'admin@yahoo.com', current_timestamp);

Или, если вы хотите конкретное значение для created_on:

INSERT INTO account 
  (username, password, email, created_on )
VALUES 
  ('usernamehere', 'password123', 'admin@yahoo.com', timestamp '2018-10-15 18:49:10');
0 голосов
/ 16 октября 2018

Я рекомендую вам прочитать официальные документы о типах данных дата / время * first .

PostgreSQL принимает несколько форматов ввода для временной метки с часовым поясом или вообще с временной меткой - формат выводазависит от параметра DateStyle.

Вы можете использовать функцию Javascript Date.now () , разделить результат на 1000 и передать его в to_timestamp PostgreSQL (двойная точность) функция.

Это всегда даст вам правильное значение.

В вашем случае:

INSERT INTO account (username, password, email, created_on, last_login) VALUES 
('usernamehere', 'password123', 'admin@yahoo.com', now(), NULL);

Пожалуйста, ПРИМЕЧАНИЕ : при вставке новой строки, вы не предоставляете идентификатор - он имеет тип serial и автоматически генерируется в последовательности для вас ..

0 голосов
/ 16 октября 2018
INSERT INTO account VALUES (
1, 'usernamehere', 'password123', 'admin@yahoo.com', now());

Последним может быть null, если вы хотите сохранить его, передайте также как now()

0 голосов
/ 16 октября 2018

Вы можете использовать функцию now(), например:

INSERT INTO account VALUES (
1, 'usernamehere', 'password123', 'admin@yahoo.com', now(), now());

Если last_login должно остаться NULL, используйте этот запрос:

INSERT INTO account VALUES (
1, 'usernamehere', 'password123', 'admin@yahoo.com', now(), null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...