为什么 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)
)
我正在尝试根据我的标准转换日期中的星期几。
我的日期条件:如果我的@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)
)