当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示
1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示
WITH CurrentDate AS (SELECT GETDATE() AS 当前日期
)
-- 使用 CONVERT 函数
SELECTCONVERT(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 CurrentDateUNION ALL-- 使用 FORMAT 函数
SELECTFORMAT(当前日期, '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 CurrentDateUNION ALL-- 使用 FORMAT 函数
SELECTFORMAT(当前日期, '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 CurrentDateUNION ALL-- 使用 FORMAT 函数
SELECTFORMAT(当前日期, '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 操作符来定义日期时间范围