首页 > 解决方案 > 星期差,如今天日期和日期前 7 天

问题描述

我想要两种方式,无论我把日期放在 -100 还是字符串日期。所以我使用 nvarchar 因为它既接受整数也接受字符串值,但它不起作用请建议我一些解决方案。

该代码在字符串日期的情况下工作正常,但在数字中它会产生问题

declare @date nvarchar(100);
declare @date1 nvarchar(100);
set @date = '2019-08-11'
set @date1= -100

select 
(case isdate(@date)
        when 1 then cast(@date as datetime)
        when 0 then dateadd(day,cast(@date as int),getdate())
                 end)
as fromDate,
(case isdate(@date1)
        when 1 then DATEADD(day, -7, convert(datetime,@date1,0))
        when 0 then dateadd(day,cast(-7 as 
int),convert(datetime,@date1,0))
                 end)
as toDate

我希望以这样的方式输出日期,它接受 -100 或字符串日期并返回两个日期,如 fromdate 和 todate 但有 7 天的差距。

标签: sqlsql-serverdatabase

解决方案


您在第二列案例中犯了一个小错误。当输入是数字时,您使用 @date1 而不是 getdate()。这是固定版本

declare @date nvarchar(100);
declare @date1 nvarchar(100);
set @date = '2019-08-11'
set @date1= -100

select 
(case isdate(@date)
    when 1 then cast(@date as datetime)
    when 0 then dateadd(day,cast(@date as int),getdate())
             end) as fromDate,
(case isdate(@date1)
    when 1 then DATEADD(day, -7, 
convert(datetime,@date1,0))
    when 0 then dateadd(day,-7 + cast(@date1 as int),getdate())
             end) as toDate

推荐阅读