Почему недельное преобразование в SQL Server не удалось в моем случае? - PullRequest
0 голосов
/ 22 июня 2019

Я пытаюсь перевести неделю из даты на основе моих критериев.

Условие моей даты: если мои @date меньше 4 AM, то @date - 1, иначе @date

declare @dates datetime
set @dates =  '2019-01-01 03:59:59'

select 
    case 
       when convert(varchar(26), @dates, 108) <= '04:00:00' 
          then convert(varchar, dateadd(day, -1, @dates), 103) 
          else convert(varchar, @dates, 103) 
    end BusinessDate

Выход:

31/12/2018    // as expected

Теперь я хочу найти номер недели для выходных данных. Поэтому я попытался

declare @dates datetime
set @dates = '2019-01-01 03:59:59'

select 
    case 
       when convert(varchar(26), @dates, 108) <= '04:00:00' 
          then convert(varchar, dateadd(day, -1, @dates), 103) 
          else convert(varchar, @dates, 103) 
    end BusinessDate,
    case 
       when convert(varchar(26), @dates, 108) <= '04:00:00' 
          then datepart(week, convert(datetime, convert(varchar, dateadd(day, -1, @dates), 103))) 
          else datepart(week, convert(datetime, convert(varchar, @dates, 103))) 
    end weeks

Но я получаю эту ошибку:

Преобразование типа данных varchar в тип данных datetime привело к значению вне допустимого диапазона.

1 Ответ

1 голос
/ 22 июня 2019

Просто вычтите четыре часа:

select datepart(week,
                dateadd(hour, -4, @dates)
               )
...