【问题标题】:How to add default value 0000-00-00 to date datatype in postgresql?如何将默认值 0000-00-00 添加到 postgresql 中的日期数据类型?
【发布时间】:2017-03-21 10:39:12
【问题描述】:

我之前使用以下命令更改了列的数据类型,但现在我想为同一列添加默认值,例如 0000-00-00,有人可以帮我吗?

alter table table name alter column name type date using(column name::date)

【问题讨论】:

  • 这是一个无效的日期,Postgres 不会让你存储无效的 DATE 值。您不能将其用作默认值。如果您想表明没有价值,请使用null - 这就是它的用途。如果您需要一个位于所有可能的 DATE 值之前的非空值,或者使用 -infinity
  • 如果您只想在列中存储“未知日期”,请将其标记为 NULLable。我怀疑您试图模仿 MySQL 使用 0000-00-00 作为占位符的行为,但我想不出任何好的理由这样做。
  • 没有0000-00-00这样的日期。没有年份0 也没有月份0 也没有日期0。最小的可能是0001-01-01
  • 啊,我想我们有一个X/Y Problem:您的实际问题是您如何插入数据,而不是表定义。尝试将空字符串作为值传递 与跳过列相同,因此该错误表明您编写了错误的 SQL。
  • @SampathSam 是的,这就是你的错误:当你没有值时,你不应该传递一个空字符串。在列上设置默认值将无济于事,因为就数据库而言,您 正在 传递一个值,即空字符串。当您没有值时,您需要更改生成 SQL 的代码以指定 NULL

标签: postgresql


【解决方案1】:

如果该列是 date,您会遇到问题,因为 0000-00-00 不是有效日期。设置默认值的语法是:

 alter table t alter column col set default '0001-01-01';

但是,您需要一个有效的日期。如果这适用于您的应用程序,我建议您只使用 NULL

【讨论】:

  • 为了完整起见,为了在当前阻止它们的列中允许空值,语法为 alter table t alter column col drop not null
  • 是否可以插入NULL而不是'0001-01-01'
  • 如果您的所有日期都 >= 1970,您也可以使用 default to_timestamp(0)
  • 没有 ::date 在我的情况下没有添加默认值。 ALTER TABLE t ALTER COLUMN col SET DEFAULT '0001-01-01'::date;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2019-04-02
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多