当前位置: 首页 > article >正文

SQL Server 当前日期及其未来三天的日期

当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示

1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示

WITH CurrentDate AS (
    SELECT GETDATE() AS 当前日期
)
-- 使用 CONVERT 函数
SELECT
    CONVERT(VARCHAR(10), 当前日期, 121) AS 当前日期T,
    CONVERT(VARCHAR(10), DATEADD(dd, 1, 当前日期), 121) AS '日期T+1',
    CONVERT(VARCHAR(10), DATEADD(dd, 2, 当前日期), 121) AS '日期T+2',
    CONVERT(VARCHAR(10), DATEADD(dd, 3, 当前日期), 121) AS '日期T+3'
FROM CurrentDate

UNION ALL

-- 使用 FORMAT 函数
SELECT
    FORMAT(当前日期, 'yyyy-MM-dd') AS 当前日期T_FORMAT,
    FORMAT(DATEADD(dd, 1, 当前日期), 'yyyy-MM-dd') AS '日期T+1_FORMAT',
    FORMAT(DATEADD(dd, 2, 当前日期), 'yyyy-MM-dd') AS '日期T+2_FORMAT',
    FORMAT(DATEADD(dd, 3, 当前日期), 'yyyy-MM-dd') AS '日期T+3_FORMAT'
FROM CurrentDate;

解释

  • CTE(Common Table Expression)
    • 使用 WITH 子句创建一个公共表表达式(CTE),使得当前日期只计算一次。
    • 这样可以避免多次调用 GETDATE() 函数,提高效率。
  • 使用 CONVERT 函数
    • 使用 CONVERT 函数将日期格式化为 YYYY-MM-DD 的格式。
    • CONVERT 函数的第一个参数是日期,第二个参数是字符串类型,第三个参数是样式代码 121。
  • 使用 FORMAT 函数
    • 使用 FORMAT 函数将日期格式化为 YYYY-MM-DD 的格式。
    • FORMAT 函数的第一个参数是日期,第二个参数是格式字符串 ‘yyyy-MM-dd’。
  • UNION ALL
    • 使用 UNION ALL 将两种方法的结果合并在一起,以便在一个结果集中展示两种格式

在这里插入图片描述

2、当前日期及其未来三天的日期,以 YYYY/MM/DD 的格式展示

WITH CurrentDate AS (
    SELECT GETDATE() AS 当前日期
)
-- 使用 CONVERT 函数
SELECT
    -- 使用 CONCAT 拼接 YYYY/MM/DD 格式的日期
    CONCAT(
        CONVERT(VARCHAR(4), YEAR(当前日期)),  -- 年份
        '/', 
        RIGHT('0' + CONVERT(VARCHAR(2), MONTH(当前日期)), 2),  -- 月份
        '/',
        RIGHT('0' + CONVERT(VARCHAR(2), DAY(当前日期)), 2)  -- 日
    ) AS 当前日期T_CONVERT,
    
    CONCAT(
        CONVERT(VARCHAR(4), YEAR(DATEADD(dd, 1, 当前日期))),  -- 年份
        '/', 
        RIGHT('0' + CONVERT(VARCHAR(2), MONTH(DATEADD(dd, 1, 当前日期))), 2),  -- 月份
        '/',
        RIGHT('0' + CONVERT(VARCHAR(2), DAY(DATEADD(dd, 1, 当前日期))), 2)  -- 日
    ) AS '日期T+1_CONVERT',
    
    CONCAT(
        CONVERT(VARCHAR(4), YEAR(DATEADD(dd, 2, 当前日期))),  -- 年份
        '/', 
        RIGHT('0' + CONVERT(VARCHAR(2), MONTH(DATEADD(dd, 2, 当前日期))), 2),  -- 月份
        '/',
        RIGHT('0' + CONVERT(VARCHAR(2), DAY(DATEADD(dd, 2, 当前日期))), 2)  -- 日
    ) AS '日期T+2_CONVERT',
    
    CONCAT(
        CONVERT(VARCHAR(4), YEAR(DATEADD(dd, 3, 当前日期))),  -- 年份
        '/', 
        RIGHT('0' + CONVERT(VARCHAR(2), MONTH(DATEADD(dd, 3, 当前日期))), 2),  -- 月份
        '/',
        RIGHT('0' + CONVERT(VARCHAR(2), DAY(DATEADD(dd, 3, 当前日期))), 2)  -- 日
    ) AS '日期T+3_CONVERT'
FROM CurrentDate

UNION ALL

-- 使用 FORMAT 函数
SELECT
    FORMAT(当前日期, 'yyyy/MM/dd') AS 当前日期T_FORMAT,
    FORMAT(DATEADD(dd, 1, 当前日期), 'yyyy/MM/dd') AS '日期T+1_FORMAT',
    FORMAT(DATEADD(dd, 2, 当前日期), 'yyyy/MM/dd') AS '日期T+2_FORMAT',
    FORMAT(DATEADD(dd, 3, 当前日期), 'yyyy/MM/dd') AS '日期T+3_FORMAT'
FROM CurrentDate;

解释

  • CTE(Common Table Expression)
    • 使用 WITH 子句创建一个公共表表达式(CTE),使得当前日期只计算一次。
    • 这样可以避免多次调用 GETDATE() 函数,提高效率。
  • 使用 CONVERT 函数和 SQL 的内置函数来生成 YYYY/MM/DD 格式的日期
    • 获取年、月、日
      • 使用 YEAR, MONTH, 和 DAY 函数分别提取年份、月份和日期部分。
    • 格式化月份和日期
      • 使用 RIGHT 函数和字符串拼接来确保月份和日期为两位数字(即补零操作)。
    • 拼接日期
      • 使用 CONCAT 函数将年、月、日按照 YYYY/MM/DD 的格式拼接起来。
  • 使用 FORMAT 函数
    • 使用 FORMAT 函数将日期格式化为 YYYY/MM/DD 的格式。
    • FORMAT 函数的第一个参数是日期,第二个参数是格式字符串 ‘yyyy/MM/dd’。

在这里插入图片描述

3、当前日期及其未来三天的日期,以 YYYYMMDD 的格式展示

WITH CurrentDate AS (
    SELECT GETDATE() AS 当前日期
)
-- 使用 CONVERT 函数
SELECT
    -- 使用 CONCAT 拼接 YYYYMMDD 格式的日期
    CONVERT(VARCHAR(4), YEAR(当前日期)) +  -- 年份
    RIGHT('0' + CONVERT(VARCHAR(2), MONTH(当前日期)), 2) +  -- 月份
    RIGHT('0' + CONVERT(VARCHAR(2), DAY(当前日期)), 2) AS 当前日期T_CONVERT,
    
    CONVERT(VARCHAR(4), YEAR(DATEADD(dd, 1, 当前日期))) +  -- 年份
    RIGHT('0' + CONVERT(VARCHAR(2), MONTH(DATEADD(dd, 1, 当前日期))), 2) +  -- 月份
    RIGHT('0' + CONVERT(VARCHAR(2), DAY(DATEADD(dd, 1, 当前日期))), 2) AS '日期T+1_CONVERT',
    
    CONVERT(VARCHAR(4), YEAR(DATEADD(dd, 2, 当前日期))) +  -- 年份
    RIGHT('0' + CONVERT(VARCHAR(2), MONTH(DATEADD(dd, 2, 当前日期))), 2) +  -- 月份
    RIGHT('0' + CONVERT(VARCHAR(2), DAY(DATEADD(dd, 2, 当前日期))), 2) AS '日期T+2_CONVERT',
    
    CONVERT(VARCHAR(4), YEAR(DATEADD(dd, 3, 当前日期))) +  -- 年份
    RIGHT('0' + CONVERT(VARCHAR(2), MONTH(DATEADD(dd, 3, 当前日期))), 2) +  -- 月份
    RIGHT('0' + CONVERT(VARCHAR(2), DAY(DATEADD(dd, 3, 当前日期))), 2) AS '日期T+3_CONVERT'
FROM CurrentDate

UNION ALL

-- 使用 FORMAT 函数
SELECT
    FORMAT(当前日期, 'yyyyMMdd') AS 当前日期T_FORMAT,
    FORMAT(DATEADD(dd, 1, 当前日期), 'yyyyMMdd') AS '日期T+1_FORMAT',
    FORMAT(DATEADD(dd, 2, 当前日期), 'yyyyMMdd') AS '日期T+2_FORMAT',
    FORMAT(DATEADD(dd, 3, 当前日期), 'yyyyMMdd') AS '日期T+3_FORMAT'
FROM CurrentDate;

在这里插入图片描述

查询以当前时间为基准,往前往后的所有数据

4、今天的所有数据

SELECT *
FROM 表名
WHERE DateDiff(dd, datetime类型字段, GETDATE()) = 0;

解释

  • 使用 DateDiff(dd, datetime类型字段, GETDATE()) = 0 来找到今天的数据。

5、昨天的所有数据

SELECT *
FROM 表名
WHERE DateDiff(dd, datetime类型字段, GETDATE()) = -1;

解释

  • 使用 DateDiff(dd, datetime类型字段, GETDATE()) = -1 来找到昨天的数据。

6、7天内的所有数据

SELECT *
FROM 表名
WHERE DateDiff(dd, datetime类型字段, GETDATE()) >= 0 AND DateDiff(dd, datetime类型字段, GETDATE()) <= 7;

解释

  • 使用 DateDiff(dd, datetime类型字段, GETDATE()) >= 0 AND DateDiff(dd, datetime类型字段, GETDATE()) <= 7 来找到包括今天在内的过去7天的数据。

7、30天内的所有数据

SELECT *
FROM 表名
WHERE DateDiff(dd, datetime类型字段, GETDATE()) >= 0 AND DateDiff(dd, datetime类型字段, GETDATE()) <= 30;

解释

  • 使用 DateDiff(dd, datetime类型字段, GETDATE()) >= 0 AND DateDiff(dd, datetime类型字段, GETDATE()) <= 30 来找到包括今天在内的过去30天的数据。

8、本月的所有数据

SELECT *
FROM 表名
WHERE DateDiff(mm, datetime类型字段, GETDATE()) = 0;

解释

  • 使用 DateDiff(mm, datetime类型字段, GETDATE()) = 0 来找到本月的数据。
  • 注意,这将包括整个当前月份,而不是从今天开始向前推算一个月的时间。

9、本年的所有数据

SELECT *
FROM 表名
WHERE DateDiff(yy, datetime类型字段, GETDATE()) = 0;

解释

  • 使用 DateDiff(yy, datetime类型字段, GETDATE()) = 0 来找到本年的数据。
  • 这将包括整个当前年份,而不是从今天开始向前推算一年的时间

10、未来一天的所有数据

SELECT *
FROM 表名
WHERE datetime类型字段 BETWEEN DATEADD(dd, 1, GETDATE()) AND DATEADD(dd, 1, GETDATE());

解释

  • 使用 DateDiff(dd, datetime类型字段, DATEADD(dd, 1, GETDATE()) AND DATEADD(dd, 1, GETDATE()) 来找到今天以后的未来一天的数据。

11、未来两天的所有数据

SELECT *
FROM 表名
WHERE datetime类型字段 BETWEEN DATEADD(dd, 1, GETDATE()) AND DATEADD(dd, 2, GETDATE());

解释

  • 使用 DateDiff(dd, datetime类型字段, DATEADD(dd, 1, GETDATE()) AND DATEADD(dd, 2, GETDATE()) 来找到今天以后的未来两天的数据。

12、未来一周(七天)的所有数据

SELECT *
FROM 表名
WHERE datetime类型字段 BETWEEN DATEADD(dd, 1, GETDATE()) AND DATEADD(dd, 7, GETDATE());

解释

  • 使用 DateDiff(dd, datetime类型字段, DATEADD(dd, 1, GETDATE()) AND DATEADD(dd, 7, GETDATE()) 来找到今天以后的未来两天的数据。

13、未来一个月(大约30天)的所有数据

SELECT *
FROM 表名
WHERE datetime类型字段 BETWEEN DATEADD(dd, 1, GETDATE()) AND DATEADD(dd, 30, GETDATE());

解释

  • 使用 DateDiff(dd, datetime类型字段, DATEADD(dd, 1, GETDATE()) AND DATEADD(dd, 30, GETDATE()) 来找到今天以后的未来一个月的数据。

14、当前日期为基础,查询今天和未来三天的数据,

并确保日期时间字段格式为 ‘YYYY-MM-DD 00:00:00.000’,可以使用以下 SQL 语句:

SELECT *
FROM 表名
WHERE datetime类型字段 BETWEEN 
      CONVERT(datetime, CONVERT(varchar(10), GETDATE(), 121) + ' 00:00:00.000', 121) 
      AND 
      CONVERT(datetime, CONVERT(varchar(10), DATEADD(day, 3, GETDATE()), 121) + ' 00:00:00.000', 121);

解释

  • 获取当前日期时间:GETDATE() 返回当前的系统日期时间。
  • 日期转换为字符串:CONVERT(varchar(10), GETDATE(), 121) 将当前日期转换为 ‘YYYY-MM-DD’ 格式的字符串。
  • 拼接时间为零点:CONVERT(varchar(10), GETDATE(), 121) + ’ 00:00:00.000’ 拼接时间为零点,得到 ‘YYYY-MM-DD 00:00:00.000’ 形式的字符串。
  • 字符串转回 datetime 类型:CONVERT(datetime, … + ’ 00:00:00.000’, 121) 将拼接后的字符串再次转换为 datetime 类型。
  • 日期加法:DATEADD(day, 3, GETDATE()) 计算当前日期之后的三天。
  • 日期范围比较:使用 BETWEEN 操作符来定义日期时间范围

http://www.kler.cn/news/368690.html

相关文章:

  • springmvc-springsecurity-redhat keycloak SAML2 xml实现
  • WinRAR技巧:如何独立压缩文件夹内的每个文件?
  • 【Linux】环境下升级redis
  • Pandabuy事件警示:反向海淘品牌如何规避风险
  • 停止等待协议、回退N帧协议、选择重传协议
  • C++线程池手写实现
  • 【pytest中同一个用例多次执行生成一个测试报告的方法】
  • 学习FPGA需要掌握哪些语言
  • 线程支持库(C++11)
  • 【JavaEE初阶】网络原理-深入理解网络通信中协议的概念
  • 20241023软考架构-------软考案例5答案
  • 相关Coverage Path Planning的论文整理
  • C#的访问修饰符
  • Python基于TensorFlow实现简单循环神经网络分类模型(SimpleRNN分类算法)项目实战
  • Vue.js 学习总结(11)—— Vue3 Hook 函数实战总结
  • Dyna-Q 算法_笔记_20241023
  • 微信小程序-获取头像和昵称
  • CSS中的!important和空格选择器深入解析
  • 安全运营 -- 监控linux命令history
  • Python量子生成对抗网络QGAN神经网络药物发现、多方法乳腺癌药物筛选应用
  • 开放式耳机哪个品牌音质好?音质最好的开放式耳机推荐!
  • linux上离线安装python环境以及机器学习环境
  • 什么是DDoS脉冲攻击?怎么防御?
  • vue项目常见模块的安装及使用
  • 【Qt】系统相关——多线程、Qt多线程介绍、常用函数、线程安全、网络、UDP Socket、TCP Socket
  • Axios与Java Spring交互:RESTful API设计与实现全解析