PostgreSQL - 创建表并设置特定的日期格式

9

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

例如:

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

可能是Postgresql日期格式的重复问题。 - DrColossos
我认为“重复”的答案可以满足您的需求。如果不是这种情况,请忽略上面的评论,但我认为链接的问题会满足您的要求。 - DrColossos
日期没有“格式”。 - user330315
@DrColossos,我想知道是否有一种方法可以将日期格式设置为特定格式,以便不接受任何其他输入。例如,将默认格式设置为“YYYY/MM”,如果有人尝试使用格式“YYYY/MM/dd”插入数据,则会失败。 - D-Lef
1个回答

7
我建议采用不同的方法:从一开始就不要将日期/时间存储为字符类型textvarchar(),...)。在你的情况下,使用一个适当的类型,可能是date
此外,永远不要使用保留字作为标识符。user根本不可能,你必须使用双引号,这是我不鼓励的。 可以像这样看起来:
CREATE TABLE usr (
  usr_id serial PRIMARY KEY
 ,usr text UNIQUE
 ,expiration_date date
  ... 
);

现在,只要输入格式明确无误,就可以使用各种输入格式。DrColossos在评论中提到的相关问题详细介绍了这方面的内容。
手册中有所有的细节信息。 为了强制执行特定的输入格式,您可以通过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;

对于反转的单词,您是正确的,我只是用“user”作为示例。我的意思是我想从Excel文件中插入数据,所以我使用命令COPY usr FROM 'C:\ usr.csv' WITH(FORMAT CSV,HEADER);。我可以在那个命令中使用类似于你的建议的东西吗? - D-Lef
@D-Lef:这是一个新问题。请参考此相关答案。 - Erwin Brandstetter
谢谢。正如我在上面的评论中提到的,我想知道是否有一种方法可以在创建表时“锁定”日期格式。 - D-Lef
@D-Lef:如果用户可以直接向表中插入数据,那么就不能使用“date”列。类型转换会在任何其他检查之前发生。你必须使用“text”列进行操作... 哎呀。 - Erwin Brandstetter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接