Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Postgresql日期格式_Django_Postgresql_Date - Fatal编程技术网

Django Postgresql日期格式

Django Postgresql日期格式,django,postgresql,date,Django,Postgresql,Date,我有一个web应用程序(用python/django编写),它(由于一个不好的规范)希望使用“yyy-mm-dd”日期格式的web表单,而其他表单则使用“dd/mm/yy”日期格式 有没有办法告诉postgresql接受两种格式的日期?例如,尝试“dd/mm/yy”,如果失败,则尝试“yyy-mm-dd” 那太棒了。来自: 日期和时间输入几乎可以采用任何合理的格式,包括ISO8601、SQL兼容、传统POSTGRES等。对于某些格式,日期输入中日、月和年的顺序不明确,并且支持指定这些字段的预期顺

我有一个web应用程序(用python/django编写),它(由于一个不好的规范)希望使用“yyy-mm-dd”日期格式的web表单,而其他表单则使用“dd/mm/yy”日期格式

有没有办法告诉postgresql接受两种格式的日期?例如,尝试“dd/mm/yy”,如果失败,则尝试“yyy-mm-dd”

那太棒了。

来自:

日期和时间输入几乎可以采用任何合理的格式,包括ISO8601、SQL兼容、传统POSTGRES等。对于某些格式,日期输入中日、月和年的顺序不明确,并且支持指定这些字段的预期顺序。将DateStyle参数设置为MDY以选择月-日-年解释,DMY以选择日-月-年解释,或YMD以选择年-月-日解释

PostgreSQL在处理日期/时间输入方面比SQL标准要求的更灵活。有关日期/时间输入的确切解析规则以及识别的文本字段(包括月份、一周中的几天和时区),请参见附录B

因此,PostgreSQL应该能够处理几乎任何您抛出的日期格式。但是,您的“dd/mm/yy”格式不明确。但是,配置参数有助于消除这种歧义

例如:

=> 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
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)
也就是说,我建议在内部将所有内容移动到ISO 8601(YYYY-MM-DD),并在应用程序的边缘处理转换。奥托,这是一个需要面对的现实,所以你应该做任何你必须做的事情来实现它。

来自:

日期和时间输入几乎可以采用任何合理的格式,包括ISO8601、SQL兼容、传统POSTGRES等。对于某些格式,日期输入中日、月和年的顺序不明确,并且支持指定这些字段的预期顺序。将DateStyle参数设置为MDY以选择月-日-年解释,DMY以选择日-月-年解释,或YMD以选择年-月-日解释

PostgreSQL在处理日期/时间输入方面比SQL标准要求的更灵活。有关日期/时间输入的确切解析规则以及识别的文本字段(包括月份、一周中的几天和时区),请参见附录B

因此,PostgreSQL应该能够处理几乎任何您抛出的日期格式。但是,您的“dd/mm/yy”格式不明确。但是,配置参数有助于消除这种歧义

例如:

=> 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
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)

也就是说,我建议在内部将所有内容移动到ISO 8601(YYYY-MM-DD),并在应用程序的边缘处理转换。OTOH,这是一个需要面对的现实,所以你应该尽你所能让它继续下去。

如果这是仅有的两种可能的格式,那么最好只明确允许它们,而不是依赖postgres来解释。例如:

=> 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
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)

如果这是仅有的两种可能的格式,那么最好只明确允许这些格式,而不是依赖postgres来解释。例如:

=> 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
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)

谁说还没有呢?尝试在命令行中输入一些日期。除非你的服务器设置为欧洲风格的日期,否则对我来说是有效的。谁说还没有呢?尝试在命令行中输入一些日期。除非你的服务器是为欧洲风格的日期设置的,否则对我有效。