sql中计算某天是全年的第几周及取得某天的所在周的周一的日期的函数
--取得某天的所在周的周一的函数 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 |
浙公网安备 33010602011771号