【问题标题】:PostgreSQL - Create table and set specific date formatPostgreSQL - 创建表并设置特定的日期格式
【发布时间】:2014-01-27 23:19:05
【问题描述】:

我想创建一个新表并设置具有特定格式的日期类型。这可能吗?

例如:

CREATE TABLE User (
... 
EXPIRATION DATE " YYYY/MM"
... 
)

【问题讨论】:

  • Postgresql date format的可能重复
  • 我认为“重复”的答案可以满足您的需求。如果不是这种情况,请忽略上面的评论,但我认为链接的问题会做你想做的。
  • 日期没有“格式”
  • @DrColossos 我只是想知道是否有办法将日期格式设置为特定格式,这样任何其他输入都不会被接受。例如,将默认格式设置为“YYYY/MM”,如果有人尝试插入格式为“YYYY/MM/dd”的数据,他将不会成功。

标签: sql postgresql date date-format create-table


【解决方案1】:

我建议一种不同的方法:永远不要将日期/时间存储为 character typetextvarchar(),...)开始。在你的情况下使用appropriate type,可能是date

另外,从不使用reserved words 作为标识符。 user 只是不可能开始,你必须双引号,我不鼓励。 可能看起来像这样:

CREATE TABLE usr (
  usr_id serial PRIMARY KEY
 ,usr text UNIQUE
 ,expiration_date date
  ... 
);

现在,只要是明确的,各种输入格式都是可能的。 related question @DrColossos has linked to in his comment 对此有更多了解。
The manual has all the details.

要强制执行特定的 输入 格式,您可以通过 to_date() 函数运行文本文字。示例:

INSERT INTO usr (usr, expiration_date)
VALUES ('flippin_user', to_date($my_date_literal, ' YYYY/MM');

注意:如果您在模式中包含 前导空白,则应在输入中!

最后,您可以在 输出 上使用to_char() 以任何您喜欢的方式格式化您的日期:

SELECT usr, to_char(expiration_date, ' YYYY/MM') AS formatted_exp_date
WHERE  usr_id = 1;

【讨论】:

  • 你是对的,我只是用'用户'作为例子。我的意思是我想从 excel 文件中插入数据,所以我使用命令 COPY usr FROM 'C:\usr.csv' WITH (FORMAT CSV,HEADER); 。我可以在该命令中使用类似于您的建议的内容吗?
  • @D-Lef:这是一个新问题。 Consider this related answer.
  • 谢谢。正如我在上面的评论中提到的,我想知道在创建表格时是否有办法“锁定”日期格式。
  • @D-Lef:不带date 列,当用户可以直接INSERT INTO 表时。类型转换发生在任何其他检查之前。您将不得不使用text 列... brrr。
猜你喜欢
  • 1970-01-01
  • 2021-08-06
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多