Я искал вокруг кусок кода, чтобы найти первый день текущей недели, и везде я смотрю я вижу это:SQL Server - Нахождение первого дня недели
DATEADD(WK, DATEDIFF(WK,0,GETDATE()),0)
Каждый место говорит, что это код, который я ищу.
Проблема с этим фрагментом кода заключается в том, что если вы запустите его в воскресенье, он выберет следующий понедельник.
Если я бег:
SELECT GetDate() , DATEADD(WK, DATEDIFF(WK,0,GETDATE()),0)
Результатов на сегодня (вторник):
2013-05-14 09:36:39.650................2013-05-13 00:00:00.000
Это правильно, он выбирает в понедельник 13-го.
Если я бегу:
SELECT GetDate()-1 , DATEADD(WK, DATEDIFF(WK,0,GETDATE()-1),0)
результаты за вчера (понедельник):
2013-05-13 09:38:57.950................2013-05-13 00:00:00.000
Это правильно, он выбирает в понедельник 13-го.
Если я бегу:
SELECT GetDate()-2 , DATEADD(WK, DATEDIFF(WK,0,GETDATE()-2),0)
Результаты по 12 (воскресенье):
2013-05-12 09:40:14.817................2013-05-13 00:00:00.000
Это не правильно, он выбирает в понедельник 13-го, когда он должен выбрать предыдущий понедельник , 6-й.
Может ли кто-нибудь осветить меня относительно того, что здесь происходит? Мне трудно поверить, что никто не указал, что это не работает, поэтому мне интересно, чего я не хватает.
I верьте, что корень проблемы - использование даты 0, которая в SQL Server разрешает «1900-01-01» - это был понедельник. –
Возможный дубликат [Получить первый день недели в SQL Server] (http://stackoverflow.com/questions/7168874/get-first-day-of-week-in-sql-server) – Pondlife
@Pondlife: Не совсем. Проблема в том, почему разные понедельники возвращаются в зависимости от даты или воскресенья или любого другого дня недели. –