为了账号安全,请及时绑定邮箱和手机立即绑定

PostgreSQL 输出的时间戳格式与 Javascript 时间戳格式不同

PostgreSQL 输出的时间戳格式与 Javascript 时间戳格式不同

湖上湖 2022-06-09 16:47:34
我无法将 SQL 的结果绑定到我的模型Javascript /Typescript。在我的模型中,我有一个created_atwith types of的属性Date。当我在 Postgres SQL 语句中使用 JSON 函数来避免关系的重复父行时,我将获得不同格式的时间戳。这是一个简单的例子SELECT   a.*,   (      SELECT         ROW_TO_JSON(profile)       FROM         (            SELECT               *            FROM               profile p             WHERE               p.account_id = a.id          )         profile    )   AS profile FROM   account a WHERE   a.id = 16这是 JSON 格式的结果{   "id":16,   "email":"test@gmail.com",   "password":"$password",   "role_id":0,   "created_at":"2020-04-01T22:03:44.324Z",   "profile":{      "id":8,      "username":"firmanjml",      "gender":0,      "bio":null,      "avatar":"www.firmanjml.me/test.jpg",      "account_id":16,      "created_at":"2020-04-02T06:03:44.32498"   }}我注意到来自帐户表的父行在末尾有 Z,created_at而转换为 JSON 的子表具有不同的时间戳格式。有没有办法可以使所有时间戳都采用Javascript格式?查询以创建模式和插入数据CREATE TABLE "account"(    id SERIAL primary key,    email varchar(50) not null,    password varchar(50) not null,    role_id int2 default 0 not null,     created_at timestamp default now() not null);CREATE TABLE "profile"(    id SERIAL primary key,    username varchar(50) not null,    gender int2 not null,    bio varchar(50),    avatar varchar(50),    account_id integer not null REFERENCES account (id),    created_at timestamp default now() not null);INSERT INTO "account" (email,"password","role_id",created_at) VALUES ('test@gmail.com','$password',0,'2020-04-02 06:03:44.324');INSERT INTO "profile" (username,gender,bio,avatar,account_id,created_at) VALUES ('fimrnajml',0,NULL,'www.firmanjml.me/test.jpg',1,'2020-04-02 06:03:44.324');
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

使用 TO_CHAR() 函数格式化 SQL 中的时间戳,例如https://www.postgresqltutorial.com/postgresql-to_char/


'YYYY-MM-DD"T"HH24:MI:SS.US"Z"' 的格式应该可以做到。这假设您所有的时间戳都采用 UTC(专业人士的做法 :-)


您的 SQL 如下所示:


SELECT

   a.*,

   (

      SELECT

         ROW_TO_JSON(profile) 

      FROM

         (

            SELECT

               username,gender,bio,avatar,account_id,to_char(created_at, 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"') created_at

            FROM

               profile p 

            WHERE

               p.account_id = a.id 

         )

         profile 

   )

   AS profile 

FROM

   account a

WHERE

   a.id = 16


查看完整回答
反对 回复 2022-06-09
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信