Получите даты от недельного числа в T-SQL

Проблема в том, что вы используете sizeOfBucket+1, который равен 8 + 1 = 9, и вы используете range() от 0 до 5-1, что означает диапазон (0, 4), который будет работать 4 раза, поэтому у вас есть 9 * 4 = 36 баллов.

Вместо этого вам нужно сделать следующее, чтобы получить 40 цветов: Запустите range как range(0, len(paletteList[0])), что означает range(0, 5) (0, 1, 2, 3, 4, всего 5 раз) и [117 ] следует использовать sizeOfBucket, то есть 8. Так что теперь у вас будет 8 * 5 = 40 цветов.

numberOfLevels = 40
sizeOfBucket = int(numberOfLevels / 4)

for x in range(0, len(paletteList[0])-1 ):
    templist = list(paletteList[0][x].range_to(paletteList[0][x+1],sizeOfBucket))
    for m in templist:
        res.append(m)

Редактировать 2

numberOfLevels = 40
sizeOfBucket = int(numberOfLevels / 4)

for x in range(0, len(paletteList[0])-1):
    if 0<x<len(paletteList[0])-2:
        templist = list(paletteList[0][x].range_to(paletteList[0][x+1],sizeOfBucket+1))
    else:
        templist = list(paletteList[0][x].range_to(paletteList[0][x+1],sizeOfBucket))
    for m in templist:
        res.append(m)
48
задан Tim Lehner 31 January 2012 в 16:59
поделиться

3 ответа

Работы ответа Quassnoi, но вид листов, которыми на рычаге для чистки дат, если они - даты в середине дня (его запуск недели оставляет Вас на один день ранее, чем Вы, необходимо быть то, при использовании времени в середине дня - можно протестировать использование GETDATE ()).

я использовал что-то вроде этого в прошлом:

SELECT 
   CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, DATECOL), DATECOL)), 101),
   CONVERT(varchar(50), (DATEADD(dd, @@DATEFIRST - DATEPART(dw, DATECOL) - 6, DATECOL)), 101)

дополнительная льгота А этого - то, что при помощи @@ DATEFIRST можно обработать нестандартную неделю стартовые дни (значение по умолчанию является воскресеньем, но с НАБОРОМ @@ DATEFIRST можно изменить это).

кажется сумасшедшим, что простое управление датой в SQL Server должно быть этим тайным, но там Вы идете...

35
ответ дан marc_s 26 November 2019 в 18:54
поделиться
SELECT DATECOL - DATEPART(weekday, DATECOL), DATECOL - DATEPART(weekday, DATECOL) + 7
3
ответ дан Quassnoi 26 November 2019 в 18:54
поделиться

Вы можете установить для @WeekNum и @YearNum все, что захотите - в этом примере они являются производными от переменной @datecol, для которой установлено значение GETDATE () в целях иллюстрации. Когда у вас есть эти значения, вы можете рассчитать диапазон дат для недели, используя следующее:

DECLARE @datecol datetime = GETDATE();
DECLARE @WeekNum INT
      , @YearNum char(4);

SELECT @WeekNum = DATEPART(WK, @datecol)
     , @YearNum = CAST(DATEPART(YY, @datecol) AS CHAR(4));

-- once you have the @WeekNum and @YearNum set, the following calculates the date range.
SELECT DATEADD(wk, DATEDIFF(wk, 6, '1/1/' + @YearNum) + (@WeekNum-1), 6) AS StartOfWeek;
SELECT DATEADD(wk, DATEDIFF(wk, 5, '1/1/' + @YearNum) + (@WeekNum-1), 5) AS EndOfWeek;
19
ответ дан 26 November 2019 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: