在sql表中返回30天前的行

时间:2017-02-24 20:45:15

标签: sql sql-server sql-convert

我想在30天前从sql中获取两个表的行 但我的日期列是nvarchar,我无法将其转换为日期 我尝试了几件事但是没有收到任何结果而且总是出错了

这是我的查询和 我将来自@Date程序的TodayTime参数发送到sql

[dbo].[Report30Days]
@Date nvarchar(10)
as

select
    coalesce(S.Date,B.Date) Date,
    coalesce(S.TAccount,0) sTAccount,
    coalesce(S.Remaining,0) sRemaining,
    coalesce(B.TAccount,0) bTAccount,
    coalesce(B.Remaining,0) bRemaining
from
    (select
        Date,sum(TAccount) TAccount, sum(Remaining) Remaining
    from SaleInvoices
    where
        DateDiff(day,convert(datetime,@Date,110),convert(datetime,Date,110))<=30
    group by Date) S
    Full Outer Join
    (select
         Date,sum(TAccount) TAccount, sum(Remaining) Remaining
    from BuyInvoices
    where
        DateDiff(day,convert(datetime,@Date,110),convert(datetime,Date,110))<=30
    group by Date ) B
    on
        S.Date=B.Date

我的问题在这里

where
        DateDiff(day,convert(datetime,@Date,110),convert(datetime,Date,110))<=30

表格中的日期列和@Date格式=&gt; 2017年2月2日

执行此程序后,将显示以下错误:

将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值。

请指导我

非常感谢

1 个答案:

答案 0 :(得分:1)

grep应该是@date数据类型(或datedatetime)。将n / varchar用于日期是一个糟糕的决定。

datetime2