【问题标题】:set default start day as monday in sql server在sql server中将默认开始日期设置为星期一
【发布时间】:2013-07-17 17:25:28
【问题描述】:

我想查找本周星期一的日期

declare @td datetime
set @td = CONVERT(datetime,'28-07-2013',105)
print @td

declare @dt datetime
set @dt = (SELECT DATEADD(wk, DATEDIFF(wk,0,@td), 0) MondayOfCurrentWeek)
print @dt

这给了我正确的结果,只有当我给出星期天的日期时,它给了我错误的答案 例如在上面 28 是 7 月的星期天,所以根据我的需要,我应该得到 22 07 2013 但默认情况下,sql server 将星期日作为一周的第一天 它给了我 29-07-2013

我也试过了

Set DateFirst 1

经过

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/8cc3493a-7ae5-4759-ab2a-e7683165320b/problem-with-datediff-and-datefirst

帮帮我,

希望能在这里得到专家的帮助

谢谢

【问题讨论】:

标签: sql sql-server date


【解决方案1】:

我会改为使用以下结构:

set @dt = DATEADD(day,
    -(DATEPART(weekday,@td) - DATEPART(weekday,'20130729') + 7) % 7
    ,@td)

这应该始终计算出从特定日期减去到上一个星期一的正确偏移量 - 它取决于DATEFIRST 的设置是有效的。它所依赖的只是 2013 年 7 月 29 日是星期一。你永远不会改变那个固定的日期。

【讨论】:

  • @Md.ParvezAlam - 输入什么?如果我采取例如你的例子,我得到“2013 年 7 月 22 日”
  • 2013-07-01 00:00:00.000 这是您对 set @td = CONVERT(datetime,'28-07-2013',105) 的答案的输出
  • 其次,我不明白您将“20130729”作为硬编码的内容
  • @Md.ParvezAlam - 如果您接受我的回答,并且不更改任何内容,并使用它来替换以 set @dt = ... 开头的当前行,它应该可以工作。正如我试图在答案下面所说的那样,20130729 唯一重要的是它是星期一。我们用它来解决问题,这样我们就不必知道当前的DATEFIRST 设置是什么。
  • 嘿抱歉@damien 误将我与其他输出混合,对不起,感谢它的工作,非常感谢
【解决方案2】:

对于这样的查询,我更喜欢使用日历表。在我的本地系统上。 . .

select max(cal_date)
from calendar
where cal_date <= '2013-07-28'
  and day_of_week = 'Mon'

在我看来,日历表的最大好处是查询显然是正确的。

【讨论】:

    【解决方案3】:

    您可以在此处找到有关一周的第一个日期和一周的最后一个日期的完整详细信息 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50624

    【讨论】:

      【解决方案4】:

      试试吧....解决你的问题

      DECLARE @DayOfTheWeek NVARCHAR(12)
      SET @DayOfTheWeek=(SELECT DATENAME(DW,GETDATE()))
      IF(@DayOfTheWeek='SUNDAY')
          BEGIN
              SELECT DATEADD(WK, DATEDIFF(WK,0,DATEADD(DAY, -1, GETDATE())), 0) MONDAYOFCURRENTWEEK
          END
      ELSE
          BEGIN
              SELECT DATEADD(WK, DATEDIFF(WK,0,GETDATE()), 0) MONDAYOFCURRENTWEEK
          END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 2019-09-25
        • 1970-01-01
        • 2011-03-09
        • 2023-03-10
        • 2015-10-06
        相关资源
        最近更新 更多