5

クエリでSQLのDateAdd関数を使用しようとしています。問題は、パラメーターを使用して2番目の引数を設定すると、数値引数が次のようなエラーを受け取ることです。

パラメータ値を10進数から日時に変換できませんでした

パラメータなしで入力した場合、つまりIntをハードコードした場合は、正常に機能します。

これは機能します:

SELECT     FieldOne, DateField
FROM         Table
WHERE     (DateField> DATEADD(day, -10, GETDATE()))

これはしませんが:

SELECT     FieldOne, DateField
FROM         Table
WHERE     (DateField> DATEADD(day, @days, GETDATE()))

ここで、@ days = -10

私が間違っていることについて何か考えはありますか?ちなみに、DataAccessコードのバグを解決しようとしているため、SQLServerManagerでこの変数を設定しています。それが違いを生むかどうかはわかりません。

ありがとう

4

4 に答える 4

13

これは古い投稿ですが、この問題を抱えている他の人にとっては、Reporting Services 2008 R2でも同様の問題が発生しましたが、エラーメッセージは「引数データ型nvarcharはdateadd関数の引数2では無効です」でした。この問題は関連している可能性があると思います。

この問題は、ReportingServicesがSQLコードを解析してレポートデータセットを生成する方法が原因で発生しました。私の場合、このデータセットクエリを変更することができました。

SELECT  DateAdd(wk, @NumWeeks, calendar_date) AS ToWeekFromDate
FROM dim_date

これに:

SELECT  DateAdd(wk, Convert(Int, @NumWeeks), calendar_date) AS ToWeekFromDate
FROM dim_date

エラーは解決されました。

編集:この答えを少し拡張すると、問題は、Reporting Servicesが正しいデータ型を解析できなかったということでした@NumWeeks。おそらくDateAdd()関数内にあり、デフォルトでNVarcharに設定されていたためだと思います。データ型をIntに設定する明示Convert()を追加すると(すでに数値であったとしても)、パーサーはのデータ型を正しく識別できるようになりました@NumWeeks

于 2012-04-29T22:45:24.503 に答える
4

次のように、2番目のパラメータではなく3番目のパラメータとして小数を渡しているようですDATEADD()

DATEADD(day, GETDATE(), @days)

質問のスニペットは問題ないように見えますが。

(わかりやすくするために、上記のスニペットはエラーです。これは、質問からエラーを生成するコードです。)

于 2009-11-23T14:15:10.147 に答える
0

次のコードは、ここでは完全に正常に機能します(SQL Server 2005、Management Studioで実行)。

DECLARE @days decimal
SET @days = -10

SELECT DATEADD(day, @days, GETDATE())

次のように

DECLARE @days decimal
SET @days = -10

SELECT * FROM myTable WHERE myDate > DATEADD(day, @days, GETDATE())

だから、問題はどこかにあるに違いない...

于 2009-11-23T14:11:47.563 に答える
0

エラーがこのステートメントに関連付けられていることを確認しますか?小数は含まれていません。これを試してみても機能します

DECLARE @days decimal (19,6)
SET @days = -10.3346

--result is actually irrelevant
IF CAST(40000.6 AS decimal (19,6)) > DATEADD(day, @days, GETDATE())
    SELECT 'yes'
ELSE
    SELECT 'no'

10進数の-10をsmalldatetimeにキャストしようとしても、これは別のエラーになります

SELECT CAST(CAST(-10 AS decimal (19,6)) AS smalldatetime)

Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type smalldatetime.
于 2009-11-23T15:16:09.993 に答える