Вы отсутствуете <Setter.Value>
<Style ...>
<Setter Property="...">
<Setter.Value>
<LinearGradientBrush />
</Setter.Value>
</Setter>
</Style>
попробуйте следующее:
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
Просто к сведению, а не придумывать код, чтобы сделать это, как насчет использования календарной таблицы.
Взгляните на это: 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
Попробуйте использовать этот код как функцию:
-- 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
Вот способ определения первого воскресенья следующего месяца, не зависящий от системы:
Сначала получите текущий месяц и добавьте один месяц. Затем установите дату этой переменной как первую. Затем найдите дневное значение этой даты (предположим, что понедельник равен 1, а воскресенье - 7). Затем вычтите значение дня 1-го числа месяца из значения дня воскресенья (7).
Теперь у вас есть количество дней между первым числом месяца и первым воскресеньем. Затем вы можете добавить это к переменной даты, чтобы получить первое воскресенье, или, поскольку мы знаем, что первое число месяца равно 1, вы можете просто добавить единицу к разнице (найденной на последнем шаге выше), и это дата первое воскресенье. (Вы должны добавить один, потому что он вычитает, и, таким образом, если первое число данного месяца ВЫХОДИТ Воскресенье, вы получите 0).
Я просмотрел документацию T-SQL, и это совсем не интуитивно понятно как бы вы использовали мой метод, но вам понадобится понятие «номер дня недели», чтобы он работал, несмотря ни на что.
Вы можете использовать DATENAME, чтобы определить желаемый день, я мог бы порекомендовать цикл для перемещения даты с 01 числа рассматриваемого месяца на первое воскресенье.
Итак, давайте попробуйте:
DECLARE @DateTime DATETIME
Установите дату начала, затем добавьте 1 день, пока не найдете то, что ищете. Используйте datename с dw ...
Мы использовали это для определения выходных, но праздничные дни будут проблемой, если мы используем таблицу для хранения этого.
Это было бы проще всего с помощью вспомогательной календарной таблицы. См., Например, эту ссылку .
Однако это можно сделать и без него, хотя это довольно сложно. Здесь я предполагаю, что вам нужна первая будущая дата, то есть первое воскресенье месяца. Я написал это с переменной @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;