Станьте первыми в воскресенье следующего месяца с помощью T-SQL

Вы отсутствуете <Setter.Value>

<Style ...> 
   <Setter Property="...">
      <Setter.Value>
         <LinearGradientBrush />
      </Setter.Value>
   </Setter>
</Style>
5
задан OMG Ponies 2 October 2009 в 00:10
поделиться

6 ответов

попробуйте следующее:

Declare @D Datetime 
Set @D = [Some date for which you want the following months' first sunday]
Select DateAdd(day, (8-DatePart(weekday, 
    DateAdd(Month, 1+DateDiff(Month, 0, @D), 0)))%7, 
    DateAdd(Month, 1+DateDiff(Month, 0, @D), 0))

РЕДАКТИРОВАТЬ Примечания:

Первое число следующего месяца задается выражением:

DateAdd(Month, 1+DateDiff(Month, 0, @D), 0)

или: который можно изменить так, чтобы первое число месяца было через два месяца, изменив 1 на 2:

DateAdd(Month, 2+DateDiff(Month, 0, @D), 0) 

РЕДАКТИРОВАТЬ: в ответ на @NissanFan и @Anthony: чтобы изменить это, чтобы вернуть первый понедельник, вторник, среду и т. д. измените значение 8 на 9, 10, 11 и т. д.

Declare @Sun TinyInt Set @Sun = 8
Declare @Mon TinyInt Set @Mon = 9
Declare @Tue TinyInt Set @Tue = 10
Declare @Wed TinyInt Set @Wed = 11
Declare @Thu TinyInt Set @Thu = 12
Declare @Fri TinyInt Set @Fri = 13
Declare @Sat TinyInt Set @Sat = 14
Declare @D Datetime, @FONM DateTime -- FirstofNextMonth 
Set @D = [Some date for which you want the following months' first sunday]
Set @FONM = DateAdd(Month, 1+DateDiff(Month, 0, @D),0)

Select 
  DateAdd(day, (@Sun -DatePart(weekday, @FONM))%7, @FONM) firstSunInNextMonth,
  DateAdd(day, (@Mon -DatePart(weekday, @FONM))%7, @FONM) firstMonInNextMonth,
  DateAdd(day, (@Tue -DatePart(weekday, @FONM))%7, @FONM) firstTueInNextMonth,
  DateAdd(day, (@Wed -DatePart(weekday, @FONM))%7, @FONM) firstWedInNextMonth,
  DateAdd(day, (@Thu -DatePart(weekday, @FONM))%7, @FONM) firstThuInNextMonth,
  DateAdd(day, (@Fri -DatePart(weekday, @FONM))%7, @FONM) firstFriInNextMonth,
  DateAdd(day, (@Sat -DatePart(weekday, @FONM))%7, @FONM) firstSatInNextMonth
7
ответ дан 13 December 2019 в 22:11
поделиться

Просто к сведению, а не придумывать код, чтобы сделать это, как насчет использования календарной таблицы.

Взгляните на это: http: //web.archive. org / web / 20070611150639 / http: //sqlserver2000.databases.aspfaq.com/why-should-i-consider-using-an-auxiler-calendar-table.html

Это также может помочь: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=99696

1
ответ дан 13 December 2019 в 22:11
поделиться

Попробуйте использовать этот код как функцию:

-- Variables
DECLARE @DATE DATETIME
DECLARE @DAY INT
DECLARE @DAYOFWEEK INT
DECLARE @TESTDATE DATETIME

-- Set
SET @TESTDATE = GETDATE()
SET @DATE = DATEADD( MONTH, 1, @TESTDATE )
SET @DAY = DATEPART( DAY, @TESTDATE )
SET @DATE = DATEADD( DAY, -@DAY + 1, @DATE )
SET @DAYOFWEEK = DATEPART( WEEKDAY, @DATE )
IF @DAYOFWEEK > 1
BEGIN
    SET @DAYOFWEEK = 8 - @DAYOFWEEK
END
ELSE
BEGIN
    SET @DAYOFWEEK = 0
END

SET @DATE = DATEADD( DAY, @DAYOFWEEK, @DATE )

-- Display
PRINT @TESTDATE
PRINT @DAY
PRINT @DAYOFWEEK
PRINT @DATE
0
ответ дан 13 December 2019 в 22:11
поделиться

Вот способ определения первого воскресенья следующего месяца, не зависящий от системы:

Сначала получите текущий месяц и добавьте один месяц. Затем установите дату этой переменной как первую. Затем найдите дневное значение этой даты (предположим, что понедельник равен 1, а воскресенье - 7). Затем вычтите значение дня 1-го числа месяца из значения дня воскресенья (7).

Теперь у вас есть количество дней между первым числом месяца и первым воскресеньем. Затем вы можете добавить это к переменной даты, чтобы получить первое воскресенье, или, поскольку мы знаем, что первое число месяца равно 1, вы можете просто добавить единицу к разнице (найденной на последнем шаге выше), и это дата первое воскресенье. (Вы должны добавить один, потому что он вычитает, и, таким образом, если первое число данного месяца ВЫХОДИТ Воскресенье, вы получите 0).

Я просмотрел документацию T-SQL, и это совсем не интуитивно понятно как бы вы использовали мой метод, но вам понадобится понятие «номер дня недели», чтобы он работал, несмотря ни на что.

0
ответ дан 13 December 2019 в 22:11
поделиться

Вы можете использовать DATENAME, чтобы определить желаемый день, я мог бы порекомендовать цикл для перемещения даты с 01 числа рассматриваемого месяца на первое воскресенье.

Итак, давайте попробуйте:

DECLARE @DateTime DATETIME

Установите дату начала, затем добавьте 1 день, пока не найдете то, что ищете. Используйте datename с dw ...

Мы использовали это для определения выходных, но праздничные дни будут проблемой, если мы используем таблицу для хранения этого.

1
ответ дан 13 December 2019 в 22:11
поделиться

Это было бы проще всего с помощью вспомогательной календарной таблицы. См., Например, эту ссылку .

Однако это можно сделать и без него, хотя это довольно сложно. Здесь я предполагаю, что вам нужна первая будущая дата, то есть первое воскресенье месяца. Я написал это с переменной @now для - ну - теперь, чтобы было легче проверить. Возможно, можно было бы написать более просто, но я думаю, что у этого больше шансов быть правильным, чем у быстро написанных более простых решений. [Исправлено добавлением DAY (d) <8]

SET @now = GETDATE();
WITH Seven(i) AS (
  SELECT -1 UNION ALL SELECT 0 UNION ALL SELECT 1
            UNION ALL SELECT 3 UNION ALL SELECT 4
            UNION ALL SELECT 5 UNION ALL SELECT 6
), Candidates(d) AS (
  SELECT DATEADD(WEEK,i+DATEDIFF(WEEK,'19000107',@now),'19000107')
  FROM Seven
) 
  SELECT TOP (1) d AS SoonestFutureFirstSunday
  FROM Candidates
  WHERE DAY(d) < 8 AND MONTH(d) >= MONTH(@now)
  AND (MONTH(d) > MONTH(@now) OR DAY(d) > DAY(@now)) 
  ORDER BY d;      ORDER BY d;
0
ответ дан 13 December 2019 в 22:11
поделиться