一、从GETDATE()函数获取日期
GETDATE()是SQL Server中最常用的日期时间函数之一,它可以返回当前系统日期和时间,包括日期、小时、分钟、秒以及毫秒。
SELECT GETDATE() AS CurrentDateTime
执行以上代码,将输出一个包含系统当前日期时间的结果集(如2021-11-03 12:34:56.789)。我们可以使用DATEPART函数来获取这个结果集中的年、月、日。
SELECT DATEPART(YEAR, GETDATE()) AS CurrentYear, DATEPART(MONTH, GETDATE()) AS CurrentMonth, DATEPART(DAY, GETDATE()) AS CurrentDay
二、从日期中截取年月日
如果我们已经有了日期,但是只需要其中的年、月、日等信息,我们可以使用CONVERT函数或者CAST函数截取。下面是使用CONVERT函数截取年、月、日的方法:
SELECT CONVERT(VARCHAR(10), GETDATE(), 120) AS CurrentDate, CONVERT(VARCHAR(7), GETDATE(), 120) AS CurrentMonth, CONVERT(VARCHAR(4), GETDATE(), 120) AS CurrentYear
上面的代码中,第三个参数120是指定日期转换的样式,每种样式代表了一种日期时间格式,详见Microsoft官方文档。我们也可以使用CAST函数截取年、月、日:
SELECT CAST(GETDATE() AS DATE) AS CurrentDate, CAST(YEAR(GETDATE()) AS NVARCHAR(4)) AS CurrentYear, CAST(MONTH(GETDATE()) AS NVARCHAR(2)) AS CurrentMonth, CAST(DAY(GETDATE()) AS NVARCHAR(2)) AS CurrentDay
三、使用日期函数统计信息
我们还可以使用日期函数来统计数据库内的数据或者计算某段时间内的数据。下面是三个例子:
1.统计当前年份内订单总数:
SELECT COUNT(*) AS TotalOrders FROM Orders WHERE YEAR(OrderDate) = YEAR(GETDATE())
2.统计每个月的订单数:
SELECT COUNT(*) AS TotalOrders, YEAR(OrderDate) AS OrderYear, MONTH(OrderDate) AS OrderMonth FROM Orders GROUP BY YEAR(OrderDate), MONTH(OrderDate) ORDER BY YEAR(OrderDate), MONTH(OrderDate)
3.在一个月内计算每天的平均销售额:
SELECT AVG(TotalAmount) AS DailyAverage FROM (SELECT DATEPART(YEAR, OrderDate) AS OrderYear, DATEPART(MONTH, OrderDate) AS OrderMonth, DATEPART(DAY, OrderDate) AS OrderDay, SUM(OrderAmount) AS TotalAmount FROM Orders WHERE MONTH(OrderDate) = 11 AND YEAR(OrderDate) = 2021 GROUP BY DATEPART(YEAR, OrderDate), DATEPART(MONTH, OrderDate), DATEPART(DAY, OrderDate)) AS Temp
四、总结
SQL Server提供了很多日期函数,GETDATE()是最常用的一个,可以返回当前系统日期和时间。我们还可以使用DATEPART函数、CONVERT函数、CAST函数来截取日期中的年、月、日等信息。值得注意的是,在使用日期函数时,一定要特别注意时间格式的问题,否则会导致统计出错。