MS SQL周日期的月份数

时间:2019-04-03 10:28:27

标签: sql sql-server

需要sql指令,它可以告诉我日期的第几周。 搜索解决方案,但没有人能按预期工作。

第一

 declare @date datetime = '2019-09-01'

 select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1

结果-0

 declare @date datetime = '2019-09-30'

 select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, @date), 0)), 0), @date - 1) + 1

结果-5

再检查一个月-2019-08-01(结果1)和2019-08-31(结果5)

第二:

 declare @d datetime = '2019-09-01' 

 select (day(@d)+datepart(weekday,dateadd(day,1-day(@d),@d))-datepart(weekday,@d))/7+1

结果-1

 declare @d datetime = '2019-09-30' 

 select (day(@d)+datepart(weekday,dateadd(day,1-day(@d),@d))-datepart(weekday,@d))/7+1

结果-5(必须为6)

以及其他无法根据需要提供结果的解决方案。

问题在一周的第一天-必须是星期一,而不是星期日。以9月为例,需要9月01日-第一周,9月02日-第二周,等等。

也许还有其他指示?

3 个答案:

答案 0 :(得分:1)

如果使用默认的一周的第一天,则2019年9月30日位于第五周,而不是第六周。由DATEFIRST设置指定。这会影响日期计算,例如DATEADDDATEPART(weekday)

如果要在第一天(如星期一)使用不同,则必须使用

更改设置
SET DATEFIRST 1;

进行更改后,上一个查询对2019-09-012019-09-30都有效

set datefirst 1

declare @date datetime = '2019-09-30'

select (day(@date)+datepart(weekday,dateadd(day,1-day(@date),@date))- datepart(weekday,@date))/7+1

这将返回6。对于2019-01-01,它将返回1

答案 1 :(得分:0)

我认为您已经使它有些复杂了。

尝试一下:

 DECLARE @d datetime = '2019-09-30'

 --Get the day of the month
 DECLARE @DayOfMonth DECIMAL(18,6) = DATEPART(DAY, @d)

 --Divide by 7 (as a decimal) and round up.
 SELECT CEILING(@DayOfMonth / 7.0)

哪个给你

Day    Week
 1      1
 2      1
 3      1
 4      1
 5      1
 6      1
 7      1
 8      2
 9      2
 10     2
 11     2
 12     2
 13     2
 14     2
 15     3
 16     3
 17     3
 18     3
 19     3
 20     3
 21     3
 22     4
 23     4
 24     4
 25     4
 26     4
 27     4
 28     4
 29     5
 30     5
 31     5

答案 2 :(得分:0)

这是一个输出每个日期一个月中星期几的代码

{
    ViewData["CurrentFilter"] = searchData;

    var profile = _context.Profile
        .Include (p => p.Industry)
        .Include (p => p.InfluenceLevel)
        .Include (p => p.OwnershipLevel)
        .Include (p => p.Perspective)
        .Include (p => p.Role)
        .OrderByDescending (p => p.ProfileName);

    if (!string.IsNullOrEmpty (searchData)) {

        profile = profile.Where (p =>
            p.ProfileName.Contains (searchData)); //Here is the error

    }

enter image description here