How do I alter the date format in Postgres?

后端 未结 3 1604
慢半拍i
慢半拍i 2020-12-01 04:29

I\'m getting the following error message

ERROR: date/time field value out of range: \"13/01/2010\" HINT: Perhaps you need a different \"datestyle\" setting.

<
相关标签:
3条回答
  • 2020-12-01 05:10
    SHOW datestyle;
    
     DateStyle 
    -----------
     ISO, MDY
    (1 row)
    
    INSERT INTO container VALUES ('13/01/2010');
    ERROR:  date/time field value out of range: "13/01/2010"
    HINT:  Perhaps you need a different "datestyle" setting.
    
    SET datestyle = "ISO, DMY";
    SET
    
    INSERT INTO container VALUES ('13/01/2010');
    INSERT 0 1
    
    SET datestyle = default;
    SET
    

    http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-DATESTYLE

    DateStyle - Sets the display format for date and time values, as well as the rules for interpreting ambiguous date input values. For historical reasons, this variable contains two independent components: the output format specification (ISO, Postgres, SQL, or German) and the input/output specification for year/month/day ordering (DMY, MDY, or YMD).

    Of course it's best to use unambiguous input format (ISO 8601), but there is no problem to adjust it as you need.

    0 讨论(0)
  • 2020-12-01 05:11

    You could set the date style to Europian (dd/mm/yyyy):

    SET DateStyle TO European;
    

    I'd advise against this though. I generally try to convert between formats, and keep ISO formatted dates in the data source. After all, it's only a matter of representation, not a matter of different data.

    0 讨论(0)
  • Edit:

    When using this COPY, the valid input format is defined by the server configuration and can either be changed for the current session using the SET command as described by Berry or by adjusting the server configuration.

    DateStyle description in the manual:
    http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-DATESTYLE

    The following is not valid for the real situation, but I'm keeping it for reference anyway

    When using date (or timestamp) literals always specify a format mask to convert them. Otherwise your statements aren't portable and won't necessarily run on every installation.

    The ANSI SQL standard for date literals is like this:

    UPDATE some_table
       SET date_column = DATE '2011-05-25'
    WHERE pk_column = 42;
    

    If you cannot change the literal format, you need to apply the to_date() function

    UPDATE some_table
       SET date_column = to_date('13/01/2010', 'dd/mm/yyyy')
    WHERE pk_column = 42;
    

    If this is not what you are doing you should show us the full SQL statement that generated the error.

    0 讨论(0)
提交回复
热议问题