【问题标题】:PostgreSQL : cast string to date DD/MM/YYYYPostgreSQL:将字符串转换为日期 DD/MM/YYYY
【发布时间】:2014-08-09 17:11:37
【问题描述】:

我正在尝试将CHARACTER VARYING 列转换为DATE,但我需要这样的日期格式:DD/MM/YYYY。我使用以下SQL 查询:

ALTER TABLE test 
ALTER COLUMN date TYPE DATE using to_date(date, 'DD/MM/YYYY');

结果是这样的日期:YYYY-MM-DD

我怎样才能得到DD/MM/YYYYformat?

提前非常感谢!

托马斯

【问题讨论】:

    标签: string postgresql date casting


    【解决方案1】:

    假设您的日期列是order_date

    SELECT (
        RIGHT(order_date, 4) 
        || '-' 
        || SUBSTRING(order_date, 4, 2) 
        || '-' 
        || LEFT(order_date, 2)
        )::DATE
    FROM test
    

    SELECT CAST(
        RIGHT(order_date, 4) 
        || '-' 
        || SUBSTRING(order_date, 4, 2) 
        || '-' 
        || LEFT(order_date, 2)
        AS DATE )
    FROM test
    

    【讨论】:

      【解决方案2】:

      取决于您需要哪种类型作为输出,但这里有 2 个基于间隔的快速示例:

      • SELECT (now() - interval '15 DAY')::date AS order_date -> 2021-07-29
      • SELECT to_char(now() - interval '15 DAY', 'YYYY-MM-DD') -> 2021-07-29

      【讨论】:

        【解决方案3】:

        如果您需要将 select 语句的返回日期转换为特定格式,您可以使用以下格式:

        select to_char(DATE (*date_you_want_to_select*)::date, 'DD/MM/YYYY') as "Formated Date"
        

        【讨论】:

          【解决方案4】:

          https://www.postgresql.org/docs/8.4/functions-formatting.html

          SELECT to_char(date_field, 'DD/MM/YYYY')
          FROM table
          

          【讨论】:

            【解决方案5】:

            documentation

            日期/时间类型的输出格式可以设置为四种之一 样式 ISO 8601、SQL (Ingres)、传统 POSTGRES(Unix 日期 格式)或德语。默认为 ISO 格式。

            所以这种特殊格式可以通过postgres日期时间输出来控制,例如:

            t=# select now();
                          now
            -------------------------------
             2017-11-29 09:15:25.348342+00
            (1 row)
            
            t=# set datestyle to DMY, SQL;
            SET
            t=# select now();
                          now
            -------------------------------
             29/11/2017 09:15:31.28477 UTC
            (1 row)
            
            t=# select now()::date;
                now
            ------------
             29/11/2017
            (1 row)
            

            请注意,正如 @Craig 在他的回答中提到的那样,更改 datestyle 也将(并且首先)改变 postgres 解析日期的方式。

            【讨论】:

              【解决方案6】:

              DATE 列没有格式。您不能为其指定格式。

              您可以使用DateStyle 来控制 PostgreSQL 发出日期的方式,但它是全局的并且有点受限。

              相反,您应该在查询日期时使用to_char 来格式化日期,或者在客户端应用程序中对其进行格式化。喜欢:

              SELECT to_char("date", 'DD/MM/YYYY') FROM mytable;
              

              例如

              regress=> SELECT to_char(DATE '2014-04-01', 'DD/MM/YYYY');
                to_char   
              ------------
               01/04/2014
              (1 row)
              

              【讨论】:

              • 好的,非常感谢!我想通过 to_date() 函数确保这是不可能的。
              • @wiltomap 不是,因为to_date 所做的只是从字符串中生成日期。日期在内部没有格式,它只是一个数字。
              • 有没有办法通过这种方式搜索数据库?例如:select to_char(DATE my_column, 'DD/MM/YYYY') from my_table order by (DATE my_column) desc?
              • 我错过了什么吗?我得到了错误:函数 to_char(字符不同,未知)不存在
              • @Luffydude 也许您使用的不是 PostgreSQL,而是 Greenplum、Redshift、Aurora 等?
              猜你喜欢
              • 1970-01-01
              • 2018-05-19
              • 2011-11-01
              • 1970-01-01
              • 1970-01-01
              • 2018-03-27
              • 1970-01-01
              • 1970-01-01
              • 2014-05-02
              相关资源
              最近更新 更多