--取得某天的所在周的周一的函数 CREATE FUNCTION getMondayBtDate(@date datetime) RETURNS date AS begin DECLARE @week INT,@cnt INT select @week = DATEPART(dw,@date) SET @cnt = 2 - @week IF(@week = 1) BEGIN SET @cnt = -6 END RETURN DATEADD(DAY, @cnt, @date) end --获取某天是当前年份中的第几周,以周一为一周的开始 CREATE FUNCTION getWeekNoBtDate(@date datetime) RETURNS date AS begin DECLARE @dtMonday DATETIME,@cnt INT; select @dtMonday = dbo.getMondayBtDate(@date) SELECT @cnt = DATEPART(dy,@dtMonday) RETURN CAST(year(@dtMonday) AS NVARCHAR) + CASE WHEN (@cnt+6)/7 < 10 THEN '0'+CAST((@cnt+6)/7 AS nvarchar) ELSE CAST((@cnt+6)/7 AS NVARCHAR) END end
SQL Server DATEPART() 函数
定义和用法
DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
语法
DATEPART(datepart,date)
date 参数是合法的日期表达式。datepart 参数可以是下列的值:
datepart | 缩写 |
---|---|
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小时 | hh |
分钟 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
纳秒 | ns |
实例
假设我们有下面这个 "Orders" 表:
OrderId | ProductName | OrderDate |
---|---|---|
1 | 'Computer' | 2008-12-29 16:25:46.635 |
我们使用如下 SELECT 语句:
SELECTDATEPART(yyyy,OrderDate)
AS OrderYear,DATEPART(mm,OrderDate)
AS OrderMonth,DATEPART(dd,OrderDate)
AS OrderDay FROM Orders WHERE OrderId=1
结果:
OrderYear | OrderMonth | OrderDay |
---|---|---|
2008 | 12 | 29 |