您的位置:

SQLServer查询日期范围详解

一、日期格式

在进行日期范围查询之前,我们需要先了解SQLServer中日期的格式,常用的日期格式有以下几种:

-- yyyy-mm-dd
SELECT CONVERT(VARCHAR(10), GETDATE(), 120)       -- 2021-09-13

-- yyyy-mm-dd hh:mi:ss
SELECT CONVERT(VARCHAR(19), GETDATE(), 120)       -- 2021-09-13 15:41:30

-- mm/dd/yyyy hh:mi:ss AM (PM)
SELECT CONVERT(VARCHAR(30), GETDATE(), 100)       -- Sep 13 2021  3:41PM

其中,常用的日期格式是yyyy-mm-dd和yyyy-mm-dd hh:mi:ss,这两种格式可以满足大部分的日期需求。

二、查询特定日期范围

如果我们需要查询一个特定的日期范围内的数据,可以通过在WHERE子句中使用BETWEEN和AND关键字进行查询,下面是一个示例:

SELECT * 
FROM table_name 
WHERE date_column BETWEEN '2021-09-01' AND '2021-09-30';

其中,table_name是需要查询的表名,date_column是表中存储日期的列名,'2021-09-01'是查询开始日期,'2021-09-30'是查询结束日期。

三、查询当前日期范围

如果我们需要查询当前日期范围内的数据,可以使用GETDATE()函数获取当前日期,下面是一个示例:

SELECT * 
FROM table_name 
WHERE date_column BETWEEN CONVERT(VARCHAR(10), GETDATE(), 120) AND CONVERT(VARCHAR(10), GETDATE(), 120);

其中,table_name是需要查询的表名,date_column是表中存储日期的列名,CONVERT(VARCHAR(10), GETDATE(), 120)会将当前日期转换为yyyy-mm-dd格式。

四、查询本周范围

如果我们需要查询本周范围内的数据,可以使用DATEPART函数获取当前日期是本周的第几天,并计算出本周的开始日期和结束日期,下面是一个示例:

SELECT * 
FROM table_name 
WHERE date_column BETWEEN 
CONVERT(VARCHAR(10), DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 0), 120) 
AND CONVERT(VARCHAR(10), DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), 6), 120);

其中,table_name是需要查询的表名,date_column是表中存储日期的列名,DATEADD和DATEDIFF函数用于计算本周的开始和结束日期,CONVERT(VARCHAR(10), ...)会将日期转换为yyyy-mm-dd格式。

五、查询本月范围

如果我们需要查询本月范围内的数据,可以使用DATEPART函数获取当前日期的月份,并计算出本月的开始日期和结束日期,下面是一个示例:

SELECT * 
FROM table_name 
WHERE date_column BETWEEN 
CONVERT(VARCHAR(7), GETDATE(), 120) + '-01' 
AND CONVERT(VARCHAR(10), DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) + 1, 0)), 120);

其中,table_name是需要查询的表名,date_column是表中存储日期的列名,CONVERT(VARCHAR(7), GETDATE(), 120) + '-01'可以获取本月的开始日期,DATEADD和DATEDIFF函数用于计算本月的结束日期。