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" 表:

OrderIdProductNameOrderDate
1 'Computer' 2008-12-29 16:25:46.635

我们使用如下 SELECT 语句:

SELECT DATEPART(yyyy,OrderDate) AS OrderYear,
DATEPART(mm,OrderDate) AS OrderMonth,
DATEPART(dd,OrderDate) AS OrderDay
FROM Orders
WHERE OrderId=1

结果:

OrderYearOrderMonthOrderDay
2008 12 29
原文地址:https://www.cnblogs.com/itjeff/p/8202947.html