如何在 PostgreSQL 中保存生日日期?

Posted

技术标签:

【中文标题】如何在 PostgreSQL 中保存生日日期?【英文标题】:How to save birthday date in PostgreSQL? 【发布时间】:2019-12-26 01:25:50 【问题描述】:

我正在做一个 GraphQL 教程,我需要保存用户的生日。我正在使用 TypeORM、Apollo-server-express 和 PostgreSQL。

这些是我当前的用户实体和架构文件。我不知道如何保存/输入生日,所以我现在设置为nullable

// user.entity.ts

@Entity()
export class User extends BaseEntity 
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column('text')
  first_name: string;

  @Column('text')
  last_name: string;

  @Column(
    unique: true
  )
  @Length(5, 100)
  @IsEmail()
  email: string;

  @Column()
  password: string;

  @Column(
    nullable: true
  )
  birthday: Date;

// user.schmea.ts

  type User 
    id: ID!
    first_name: String
    last_name: String!
    email: String!
    birthday: Date
    created_at: Date @date(format: "HH:MM mmmm d, yyyy")
    updated_at: Date @date(format: "HH:MM mmmm d, yyyy")
  

  input CreateUserInput 
    first_name: String
    last_name: String!
    email: String!
    password: String!
    birthday: Date
  

这是我的示例 mutation 输入 createUser

mutation 
  createUser(data: 
    first_name: "Some",
    last_name: "One",
    email: "some@one.com",
    password: "hashThisPlease1"
  ) 
    id
    first_name
    last_name
    email
  

我应该输入birthday 作为string"1990-12-30" 吗?这是在PostgreSQL中保存birthday列的标准方法吗?

请帮忙。

【问题讨论】:

保存为时间戳有什么问题? 在数据库中使用date 【参考方案1】:

生日通常保存为日期,大多数数据库(包括 Postgres)都支持日期 (see docs)。 您只需将生日装饰器更改为:

  @Column(
    type: 'date',
    nullable: true
  )
  birthday: Date | null;

【讨论】:

【参考方案2】:

我绝不是专家,但我同意 JudgeFudge 的观点。 虽然我想补充一点,但您可以选择将属性类型设置为“字符串”:

@Column( type: "date" )
date_of_birth: string;

然后你会得到(在我看来)更好理解的错误信息:

"Datum/Zeit-Feldwert ist außerhalb des gültigen Bereichs: »1986-20-25«" 
("Date/Time field value is not in valid range")

代替:

"ungültige Eingabesyntax für Typ date: »NaN-NaN-NaN«" 
("invalid input syntax for type date")

如果您输入:"1986-02-30" 属性类型为"string",您将收到类似上述的错误,而属性类型为"Date" 时,由于javascript Date 构造函数,它会将其转换为"1986-03-02"

但是你可以失去一些“模式透明度”,因为你要求一个类型为“字符串”而不是“日期”的值,例如当我像我一样使用 TypeGraphQl 时 并在 Args/Input-Types 中实现实体部分。

即将结束,如果您的请求包含 DateObject 的字符串化(到 JSON)实例,则在尝试使用 DateObject 构造函数初始化此实例时将捕获无效日期,因此您可以使用“Date”而不是“字符串”,当使用这个(最后一个)方法时。

【讨论】:

以上是关于如何在 PostgreSQL 中保存生日日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TabView SwiftUI 中保存视图的列表状态

如何从图像集合中保存视频文件?

如何在核心数据中保存单个实体

如何在 Swift 应用程序中保存本地数据?

如何在 Symfony2 中保存视图中的数据

在swiftui中保存照片?