在我的情况下,为什么周转换在SQL Server中失败?

时间:2019-06-22 12:26:45

标签: sql sql-server datetime week-number

我正在尝试根据我的条件转换日期的星期。

我的约会条件:如果我的@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 个答案:

答案 0 :(得分:1)

只需减去四个小时:

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