为什么 Week 转换在我的 SQL 服务器中失败?

Why Week conversion failed in SQL Server in my case?

我正在尝试根据我的标准转换日期中的星期几。

我的日期条件:如果我的@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

但是我得到这个错误:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

只需减去四个小时:

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