当前日期及其未来三天的日期,并分别以 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 操作符来定义日期时间范围

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部