SQL 生成日历

yizhihongxing

生成日历是SQL语言中的一个经典问题。下面我将介绍如何使用SQL生成日历。

创建日历表

首先,我们需要先创建一个日历表。以下是创建日历表的SQL代码:

CREATE TABLE calendar (
  `date` date NOT NULL PRIMARY KEY,
  year int(4) NOT NULL,
  month int(2) NOT NULL,
  day int(2) NOT NULL,
  quarter int(1) NOT NULL,
  week int(2) NOT NULL,
  dayofweek int(1) NOT NULL,
  dayofyear int(3) NOT NULL,
  holiday varchar(50),
  weekend int(1) NOT NULL,
  lunar_year int(4),
  lunar_month int(2),
  lunar_day int(2),
  solar_term varchar(10)
);

插入数据

然后,我们需要插入数据来填充日历表。以下是插入数据的SQL代码:

--生成数据1900-01-01到2100-12-31
SET @start_date = '1900-01-01';
SET @end_date = '2100-12-31';

WHILE @start_date <= @end_date DO
  INSERT INTO calendar (
    `date`,
    year,
    month,
    day,
    quarter,
    week,
    dayofweek,
    dayofyear,
    weekend,
    holiday,
    lunar_year,
    lunar_month,
    lunar_day,
    solar_term
  ) VALUES (
    @start_date,
    YEAR(@start_date),
    MONTH(@start_date),
    DAY(@start_date),
    QUARTER(@start_date),
    WEEKOFYEAR(@start_date),
    DAYOFWEEK(@start_date),
    DAYOFYEAR(@start_date),
    IF(weekday(@start_date)=5 OR weekday(@start_date)=6, 1, 0),
    NULL,
    NULL,
    NULL,
    NULL
  );

  SET @start_date = DATE_ADD(@start_date, INTERVAL 1 DAY);
END WHILE;

--添加节日
UPDATE calendar SET holiday = '元旦节' WHERE month = 1 AND day = 1;
UPDATE calendar SET holiday = '春节' WHERE month = 2 AND day = 5;
UPDATE calendar SET holiday = '清明节' WHERE month = 4 AND day = 4;
UPDATE calendar SET holiday = '劳动节' WHERE month = 5 AND day = 1;
UPDATE calendar SET holiday = '端午节' WHERE month = 6 AND day = 2;
UPDATE calendar SET holiday = '中秋节' WHERE month = 9 AND day = 15;
UPDATE calendar SET holiday = '国庆节' WHERE month = 10 AND day = 1;

查询数据

有了日历表的数据,我们就可以使用SQL语句轻松地生成日历了。以下是两个具体的实例:

实例1:按周生成日历

我们可以按周生成一个日历。如下所示:

SELECT
  year,
  week,
  CONCAT(MAX(CASE WHEN dayofweek = 2 THEN `date` END), ',',
         MAX(CASE WHEN dayofweek = 3 THEN `date` END), ',',
         MAX(CASE WHEN dayofweek = 4 THEN `date` END), ',',
         MAX(CASE WHEN dayofweek = 5 THEN `date` END), ',',
         MAX(CASE WHEN dayofweek = 6 THEN `date` END), ',',
         MAX(CASE WHEN dayofweek = 7 THEN `date` END)) AS week_range
FROM calendar
GROUP BY year, week;

该查询会生成以年和周为分组的日历,其中包含每周的日期范围。

实例2:按月生成日历

我们也可以按月生成一个日历。如下所示:

SELECT 
  *,
  CONCAT(YEAR(`date`), '-', LPAD(MONTH(`date`), 2, '0'), '-', LPAD(DAY(`date`), 2, '0')) AS `full_date`
FROM
  calendar
WHERE 
  year = 2021 AND month = 9
ORDER BY `date` ASC;

该查询会生成一个以2021年9月为基础的月份日历,并按日期升序排序。

总之,使用以上的方法,我们可以轻松地使用SQL生成日历表。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL 生成日历 - Python技术站

(0)
上一篇 2023年3月27日
下一篇 2023年3月27日

相关文章

  • SQL 创建稀疏矩阵

    创建稀疏矩阵是数据分析及数据挖掘中的一个重要步骤,SQL是常用的关系型数据库操作语言,下面我将给出创建稀疏矩阵的完整攻略。 一、前提条件 在使用SQL创建稀疏矩阵之前,需要保证以下前提条件已经满足:1. 数据库中已经存在数据表,并且每个数据表中的数据按照一定规则进行了处理(如归一化处理、去重处理等)。2. 对于待创建的稀疏矩阵,已经明确规定了需要保留的数据列…

    database 2023年3月27日
    00
  • mysql 模糊查询 concat()的用法详解

    MySQL 模糊查询 concat()的用法详解 在 MySQL 中,我们经常需要进行模糊查询操作,而 concat() 函数则是一个常见的字符串连接函数,在模糊查询中也可以发挥重要的作用。本文将带你详细了解 concat() 函数的用法,并提供两条实际的示例,以帮助大家更好地理解 concat() 函数。 concat() 函数的语法 concat() 函…

    database 2023年5月22日
    00
  • Deepin UOS编译安装Redis的实现步骤

    下面我会为您提供详细的「Deepin UOS编译安装Redis的实现步骤」攻略。 准备工作 在开始编译安装Redis之前,您需要确保以下工具已经安装完成: GCC编译器 make工具 tcl库 您可以通过运行以下指令来安装: sudo apt install gcc make tcl 开始编译安装Redis 下载Redis源码 您可以通过官网下载最新版本的R…

    database 2023年5月22日
    00
  • MySql各种查询方式详解

    MySql各种查询方式详解 前言 MySql是一种开源的关系型数据库管理系统,具有跨平台、高性能、高可靠性等特点,被广泛应用于Web开发及其他领域。在MySql中,查询是最基本的操作之一,而各种不同的查询方式也给我们在实际使用中带来了不同的便利。本文将介绍MySql中各种常见的查询方式,供读者参考。 简单查询 简单查询是指只涉及到单个表的查询方式,常用的操作…

    database 2023年5月22日
    00
  • SQL Server SQL高级查询语句小结

    SQL Server SQL高级查询语句小结 1. 联合查询 联合查询(UNION)是将两个或多个 SELECT 语句的结果组合成一个结果集的操作。下面是一个简单的联合查询示例,将两个表的数据合并在一起: SELECT name FROM table1 UNION SELECT name FROM table2 2. 子查询 子查询是一个 SELECT 语句…

    database 2023年5月21日
    00
  • Java的MyBatis框架中MyBatis Generator代码生成器的用法

    下面是Java的MyBatis框架中MyBatis Generator代码生成器的用法的完整攻略。 什么是MyBatis Generator? MyBatis Generator是一个可以基于MyBatis框架自动生成Java持久层代码的工具,可以快速地创建对数据库表的增、删、改、查的操作类、POJO类及其映射映射文件等,简化了持久层代码的编写工作。 MyB…

    database 2023年5月18日
    00
  • 具有负载均衡功能的MySQL服务器集群部署及实现

    具有负载均衡功能的MySQL服务器集群部署及实现包含以下步骤: 步骤一:选择负载均衡软件 在选择负载均衡软件时,我们可以选择开源的软件,如LVS、HAProxy、Nginx等,也可以选择商业软件,如F5、CISCO等。本文选择HAProxy软件。 步骤二:安装MySQL数据库 在同一网络环境下,安装MySQL数据库。确保MySQL所有服务器的版本一致,IP地…

    database 2023年5月19日
    00
  • mysql 基本操作

    MySQL 基本操作 MySQL 是一种常见的关系型数据库管理系统,被广泛用于 Web 应用程序的后台数据处理。本指南将介绍如何进行基本的 MySQL 操作。 连接到 MySQL 在进行 MySQL 操作之前,你需要先连接到 MySQL 服务器。可以在终端中使用以下命令进行连接: mysql -u USERNAME -p 其中,USERNAME 表示你的 M…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部