2017-02-24 6 views
0

30日前からSQLのから2つのテーブルの行をフェッチしたいのですが、私の日付の列はnvarcharで、私はそれを日付に変換できません 私はいくつかのことを試みましたが、任意の結果を受けて、常にエラーを得た返された行から30日前のsqlテーブル

これは私がSQLへ@Dateことにより、プログラムからTodayTimeパラメータを送って、私のクエリと ある

[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形式=> 2017年2月2日

は後にこの手順を実行し、このエラーが表示されます。

日時データ型にnvarcharデータ型の変換その結果、範囲外の値が生じました。

が本当にdateデータの代わりに入力する(またはdatetime、またはdatetime2)である必要があり、非常に

+0

正確なエラーは何ですか。また、 'Date'のデータ型は? –

+0

今日の日付をストアドプロシージャのパラメータとして渡す必要があるのはなぜですか? SQLスクリプトで今日の日付を取得できます。また、なぜパラメータの型をnvarcharとして定義する必要がありますか? – Sparrow

+0

あまりあいまいではない日付の例を使用できますか? 12月31日のように? – SqlZim

答えて

1

@dateありがとう私を導いてください。日付にn/varcharを使用することは悪い決定です。

/* lets make a proper date parameter */ 
/* @date nvarchar format is YYYY/MM/DD, replacing/gives us YYYYMMDD 
    which sql server can easily convert to a date */ 
declare @ActualDate date; 
set @ActualDate = dateadd(day,-30,convert(date,replace(@date,'/',''))); 

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 convert(date,replace(Date,'/','')) => @ActualDate 
    group by Date 
    ) S 
    Full Outer Join 
    (select 
     Date,sum(TAccount) TAccount, sum(Remaining) Remaining 
    from BuyInvoices 
    where convert(date,replace(Date,'/','')) => @ActualDate 
    group by Date 
    ) B 
    on S.Date=B.Date 
+0

テーブルの日付列もnvarcharで であり、実行時にエラーが表示される – MPERSIA

+0

@MPersia updated ...すべての日付がテキストとして保存されているのはなぜですか? – SqlZim

+0

次に、samsでshamsiカレンダーを使用するにはどうすればよいですか? この時間までこれは私にとって快適でした – MPERSIA

関連する問題