首页 > 数据库 >SQL 获取SQL Server中两个日期之间的所有日期

SQL 获取SQL Server中两个日期之间的所有日期

时间:2024-06-22 13:53:58浏览次数:22  
标签:01 2022 Server CTE 日期 DateValue SQL 查询

方法一:使用CTE和日期函数

使用CTE(公共表表达式)和日期函数,可以轻松地获取两个日期之间的所有日期。

 

首先,我们创建一个CTE,该CTE的目的是生成一个日期序列。然后,在CTE中使用日期函数生成从开始日期到结束日期的日期序列。最后,我们从CTE中选择所有的日期。

下面是一个示例查询,展示了如何使用CTE和日期函数获取从”2022-01-01″到”2022-01-10″之间的所有日期:

WITH DateSequence AS (
    SELECT CAST('2022-01-01' AS DATE) AS DateValue
    UNION ALL
    SELECT DATEADD(DAY, 1, DateValue)
    FROM DateSequence
    WHERE DATEADD(DAY, 1, DateValue) <= CAST('2022-01-10' AS DATE)
)
SELECT DateValue
FROM DateSequence
OPTION (MAXRECURSION 0);

 

 

运行以上查询,我们将得到以下结果:

DateValue
----------
2022-01-01
2022-01-02
2022-01-03
2022-01-04
2022-01-05
2022-01-06
2022-01-07
2022-01-08
2022-01-09
2022-01-10

方法二:使用日期表

如果我们经常需要获取日期之间的所有日期,我们可以创建一个日期表,该表包含从最小日期到最大日期之间的所有日期。然后,在需要获取日期之间的所有日期时,我们可以简单地从日期表中选择所需的日期。

以下是一个创建日期表的示例:

CREATE TABLE DateTable (
    DateValue DATE
);

DECLARE @StartDate DATE = '2000-01-01';
DECLARE @EndDate DATE = '2030-12-31';

WHILE @StartDate <= @EndDate
BEGIN
    INSERT INTO DateTable (DateValue) VALUES (@StartDate);
    SET @StartDate = DATEADD(DAY, 1, @StartDate);
END;

运行以上查询,我们将创建一个名为DateTable的表,其中包含从”2000-01-01″到”2030-12-31″之间的所有日期。

 

现在,我们可以使用以下查询从日期表中选择两个日期之间的所有日期:

SELECT DateValue
FROM DateTable
WHERE DateValue >= '2022-01-01' AND DateValue <= '2022-01-10';
 

运行以上查询,我们将得到与上述方法一相同的结果。

方法三:使用递归查询

除了使用CTE,我们还可以使用递归查询来获取两个日期之间的所有日期。

以下是一个使用递归查询的示例:

WITH DateSequence AS (
    SELECT CAST('2022-01-01' AS DATE) AS DateValue
    UNION ALL
    SELECT DATEADD(DAY, 1, DateValue)
    FROM DateSequence
    WHERE DATEADD(DAY, 1, DateValue) <= CAST('2022-01-10' AS DATE)
)
SELECT DateValue
FROM DateSequence;

与第一种方法类似,我们使用递归查询生成一个日期序列,然后选择所需的日期。

出处:SQL 获取SQL Server中两个日期之间的所有日期|极客教程 (geek-docs.com)

 

标签:01,2022,Server,CTE,日期,DateValue,SQL,查询
From: https://www.cnblogs.com/xygsj/p/18262212

相关文章

  • [MySQL总结] Explain详解、索引最佳优化
    目录ExplainExplain分析示例explain两个变种explain中的列1.id列2.select_type列3.table列4.type列5.possible_keys列6.key列7.key_len列8.ref列9.rows列10.Extra列索引最佳优化实践1.全值匹配2.最左前缀法则3.不在索引列上做任何操作(计算、函数、(自动or......
  • MySQL总结-索引优化实战详解一
    目录一、索引下推优化详解1.联合索引第一个字段用范围不会走索引2.强制走索引3.覆盖索引优化4.in和or在表数据量比较大的情况会走索引,在表记录不多的情况下会选择全表扫描5.likeKK%一般情况都会走索引索引下推(IndexConditionPushdown,ICP)为什么范围查找Mysql没有......
  • SpringBoot:SpringBoot集成Druid监控慢SQL
    一、前言  数据库连接池是一个至关重要的组成部分,一个优秀的数据库连接池可以显著提高应用程序的性能和可伸缩性。常见的连接池:Druid、HikariCP、C3P0、DBCP等等,不过目前大部分都是使用Druid或者SpringBoot默认的HikariCP!  本文将详细介绍如何在SpringBoot项目中配置......
  • 在Linux中,mysql 数据备份工具有哪些?
    在Linux中,MySQL数据备份工具有多种选择,这些工具在功能、性能和易用性上有所不同。以下是一些常用的MySQL数据备份工具及其特点:mysqldump描述:mysqldump是MySQL自带的一个命令行工具,用于执行逻辑备份。它通过导出SQL语句来备份数据库,可以备份表结构、数据以及视图等。优点:备......
  • 在Linux中,如何重置 mysql root 密码?
    在Linux系统中重置MySQL的root密码通常有几种方法,以下是一些常见的步骤:1.使用mysqladmin命令首先,停止MySQL服务:sudosystemctlstopmysql以安全模式启动MySQL,允许root用户无密码登录:sudomysqld_safe--skip-grant-tables&连接到MySQL服务器:mysql-uroot选......
  • 在Linux中,mysql 如何减少主从复制延迟?
    主从复制延迟是MySQL数据库中一个常见但关键的问题,它直接影响到数据的实时性和系统的响应速度。在企业生产环境中,解决此问题能显著提高数据库的性能和稳定性。下面将详细探讨如何减少主从复制延迟:查看同步延迟状态使用SHOWSLAVESTATUS命令:该命令可提供关于从库复制状态的详......
  • 【MySQL 的三大日志的作用】
    在管理MySQL数据库时,了解和区分数据库使用的三大日志类型至关重要。这些日志对于确保数据的完整性、提供恢复机制以及维持数据库的稳定性发挥着关键作用。最主要还是小豆前段时间去参加面试被问到了这些内容,下面将详细讨论RedoLog、Binlog和UndoLog的异同。RedoLog(重做......
  • SqlAlchemy-2-0-中文文档-二十-
    SqlAlchemy2.0中文文档(二十)原文:docs.sqlalchemy.org/en/20/contents.html插入,更新,删除原文:docs.sqlalchemy.org/en/20/core/dml.htmlINSERT、UPDATE和DELETE语句是基于从UpdateBase开始的层次结构构建的。Insert和Update构造基于中介ValuesBase构建。DML基......
  • SqlAlchemy-2-0-中文文档-二-
    SqlAlchemy2.0中文文档(二)原文:docs.sqlalchemy.org/en/20/contents.html使用UPDATE和DELETE语句原文:docs.sqlalchemy.org/en/20/tutorial/data_update.html到目前为止,我们已经覆盖了Insert,这样我们可以将一些数据放入我们的数据库中,并且花了很多时间在Select上,该......
  • SqlAlchemy-2-0-中文文档-十三-
    SqlAlchemy2.0中文文档(十三)原文:docs.sqlalchemy.org/en/20/contents.html事件和内部原文:docs.sqlalchemy.org/en/20/orm/extending.htmlSQLAlchemyORM以及Core通常通过事件钩子进行扩展。请务必查看事件系统的使用。ORM事件会话事件映射器事件实例事件......