我有一个Web应用程序(用python/django编写),因为预期“YYYY-mm-dd”日期格式和其他使用“dd/mm/yy”日期格式的Web窗体。Postgresql日期格式
有没有办法告诉postgresql接受这两种格式的日期?例如,尝试“dd/mm/yy”,如果失败,则尝试“yyyy-mm-dd”。
那真是太棒了。
我有一个Web应用程序(用python/django编写),因为预期“YYYY-mm-dd”日期格式和其他使用“dd/mm/yy”日期格式的Web窗体。Postgresql日期格式
有没有办法告诉postgresql接受这两种格式的日期?例如,尝试“dd/mm/yy”,如果失败,则尝试“yyyy-mm-dd”。
那真是太棒了。
的日期和时间投入在几乎任何合理的格式被接受,包括ISO 8601,SQL兼容的,传统Postgres的和其他。对于某些格式,日期输入中日期,月份和年份的排序不明确,并且支持指定这些字段的预期排序。将DateStyle参数设置为MDY以选择月 - 日 - 年解释,DMY选择日 - 月 - 年解释,或YMD选择年 - 月 - 日解释。
PostgreSQL在处理日期/时间输入方面比SQL标准要求更灵活。有关日期/时间输入以及识别的文本字段(包括月份,星期几和时区)的确切解析规则,请参阅附录B.
因此,PostgreSQL应该能够处理任何日期格式。然而,你的“dd/mm/yy”格式不明确。但是,存在DateStyle
配置参数来帮助解决这种模糊问题。
例如:
=> create table x (d date not null);
=> insert into x values ('2001-01-10');
=> insert into x values ('Feb 2 2980');
=> insert into x values ('01/02/03');
=> select * from x;
d
------------
2001-01-10
2980-02-02
2003-02-01
这就是说,我建议你在内部移动的一切ISO 8601(YYYY-MM-DD),并在应用的边缘处理的转化。 OTOH,有现实可以应对,所以你应该做任何你必须做的事来实现它。
如果这些是唯一可能的两种格式,那么最好只明确地允许那些,而不是依靠postgres来解释。例如:
with w as (select '2011-12-13' as input_date union select '13/12/2011')
select case when input_date~'^\d\d\d\d-\d\d-\d\d$'
then to_date(input_date, 'yyyy-mm-dd')
when input_date~'^\d\d/\d\d/\d\d\d\d$'
then to_date(input_date, 'dd/mm/yyyy')
end
from w;
case
------------
2011-12-13
2011-12-13
(2 rows)
谁说这不是已经?尝试在命令行输入一些日期。适用于我,除非您的服务器设置为欧式风格日期。 – 2011-03-29 04:21:11