我想找到当周星期一的日期
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
经历了
dint帮帮我,
我希望从专家处获得帮助
谢谢
答案 0 :(得分:2)
相反,我会使用以下构造:
set @dt = DATEADD(day,
-(DATEPART(weekday,@td) - DATEPART(weekday,'20130729') + 7) % 7
,@td)
这应始终计算出正确的偏移量,以便从特定日期减去前一个星期一 - 并且不取决于DATEFIRST
设置有效。所有这一切取决于2013年7月29日是星期一。你永远不会改变那个固定的日期。
答案 1 :(得分:1)
我更喜欢使用日历表来查询这样的查询。在我的本地系统上。 。
select max(cal_date)
from calendar
where cal_date <= '2013-07-28'
and day_of_week = 'Mon'
在我看来,日历表的最大好处是可以看出查询显然是正确的。
答案 2 :(得分:1)
您可以在此处找到有关第一周日期和最后一周日期的详细信息 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50624
答案 3 :(得分:1)
试一试....解决你的问题
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