【问题标题】:How to get year, month and day from seconds in PostgreSql?如何从 PostgreSql 中的秒数中获取年月日?
【发布时间】:2018-08-30 10:37:15
【问题描述】:

我正在尝试根据日期以秒格式创建三列。

我的user.updated_at = 1521533490

我想分别获取年、月和日,并将这些格式化的值放在列中,例如:

年 -> 2018 年,月 -> 11,日 -> 23

有人知道我如何在pgSQL 中做到这一点吗?

【问题讨论】:

  • 日期没有三列。只需存储一个日期(或日期时间) - 但我认为 1521533490 是昨天(3 月 20 日),而不是 11 月 23 日

标签: sql database postgresql date


【解决方案1】:

试试这个方法来获取不同的参数,然后你可以做任何你想做的事情:

SELECT to_timestamp(1521533490); //2018-03-20T08:11:30.000Z
SELECT to_char(to_timestamp(1521533490), 'HH'); // 08 Hour
SELECT to_char(to_timestamp(1521533490), 'MI'); // 11 Minutes
SELECT to_char(to_timestamp(1521533490), 'SS'); // 30 Seconds
SELECT to_char(to_timestamp(1521533490), 'DD'); // 20 Day
SELECT to_char(to_timestamp(1521533490), 'Mon'); // MAR Month
SELECT to_char(to_timestamp(1521533490), 'YYYY'); // 2018 Year

【讨论】:

    【解决方案2】:

    我想分别获取年、月和日,并将这些格式化的值放在列中

    不要那样做。

    使用datetimestamp 类型的单个列,具体取决于您的应用程序。并非您的三列的每个组合都是有效日期。但是date 类型的单个列中的每个值都是有效日期。

    如果您需要单独的日期部分,请使用PostgreSQL's date/time functions

    【讨论】:

      【解决方案3】:

      使用EXTRACT 函数。

      SELECT to_timestamp(updated_at) "Date",
      EXTRACT(YEAR FROM (to_timestamp(updated_at))) "Year",
      EXTRACT(MONTH FROM (to_timestamp(updated_at))) "Month",
      EXTRACT(DAY FROM (to_timestamp(updated_at))) "Day"
      FROM users
      

      输出

      Date                  Year  Month  Day
      2018-03-20T08:11:30Z  2018  3      20
      

      SQL 小提琴:http://sqlfiddle.com/#!15/afe0e/15/0

      有关EXTRACT 函数的更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-18
        • 2021-06-06
        • 2011-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多