【问题标题】:Is there any function in sql to extract week?sql中有什么函数可以提取星期吗?
【发布时间】:2022-01-20 08:02:30
【问题描述】:

我想从 datetime 中提取星期,我想要的输出是 'YY/week',其中 week 是一年中的第几周(例如,'201724' 是 2017 年的第 24 周)。

【问题讨论】:

  • dev.mysql.com/doc/refman/8.0/en/… - 否则检查可能不同的 postgresql 文档(不是 postgresql 用户所以不知道)
  • 那么,您是在哪个数据库上执行此操作的?
  • 向我们展示一些示例表数据和预期结果 - 全部为格式化文本(不是图像,不是链接。)minimal reproducible example

标签: mysql sql postgresql datetime google-bigquery


【解决方案1】:

“一年中的一周”这个词太含糊了。

  1. 一周可能从星期日、星期一或其他工作日开始
  2. 一年中的周数可以从 0 或 1 开始
  3. 一年中的周数可以从包括 1 月 1 日在内的那一周开始(因此可能是部分的)或从一年中的第一个完整周开始
  4. 一年中的最后一周,如果是部分的,可以计算或不计算

每个 DBMS 都有自己的函数(有时是原始的,总是使用原始名称),可以返回给定日期一年中的周数。但他们不能总是考虑到上述特点。


jarlh提供的重要补充:

ISO 8601 (#4.3.4):

  • 一年中的第一个日历周包括该年的第一个星期四。
  • 一个日历年的最后一个日历周是紧接下一个日历年第一个日历周之前的一周。
  • 第 1 周是一年的第一周。
  • 一个日历周从星期一开始。

ISO 9075 甚至没有提到周。

【讨论】:

  • (附加信息)ISO 8601:一年中的第一个日历周包括该年的第一个星期四一个日历年的最后一个日历周是紧接下一个日历年第一个日历周之前的一周。第 1 周是一年的第一周。一个日历周从星期一开始。 (ISO 9075 甚至没有提到周。)
【解决方案2】:
SELECT TO_CHAR(TO_DATE('19-FEB-22') , 'IW') from DUAL;

要获得相应的四位数年份,请使用

SELECT TO_CHAR(TO_DATE('19-FEB-22'), 'IYYY') FROM DUAL;

TO_CHAR() 有很多这样的选项,请阅读 Oracle 手册中的更多信息或提取日期的移植Extract Portion of Date Time Value

输出

【讨论】:

  • ORACLE mysql 和 ORACLE postgresql..
【解决方案3】:

可以使用下面的Mysql类型查询来提取。

SELECT DATE_FORMAT(BirthDate, " %u %Y") FROM Employees; 

其中BirthDate 数据库中的日期列和Employees 是表名。

这将导致

49 1968
08 1952
35 1963

星期和年份。

【讨论】:

    【解决方案4】:

    在postgresql中:

     SELECT to_char('2016-12-31 13:30:15'::timestamp without time zone, 'yy/ww') ;
    

    结果:

    16/53
    

    【讨论】:

      猜你喜欢
      • 2012-02-11
      • 1970-01-01
      • 2020-08-05
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      相关资源
      最近更新 更多