-2

私はDATEが必要なクエリに取り組んでいます!!

DECLARE @YesterDay DATETIME, @Today DATETIME 

SET @YesterDay = DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) 
SET @Today = DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0) 
select @YesterDay = convert(varchar, getdate()-1 , 110) 
select @Today = convert(varchar, getdate() , 110) 
EXEC    @return_value = [dbo].[post_sec_admin_list_user_log]
        @pDateFr = @YesterDay ,
        @pDateTo = @Today,
        @pName = '',
        @pSec = NULL


@DateFr is varchar(50)
@DateT0 is varchar(50)

とは両方@dateFrとも..@dateTovarchar

そして、私はそれを実行しようとします、それはこのように時間形式を出力します2011-06-09 16:15:38.927

エラーステートメント

varchar データ型を datetime データ型に変換すると、範囲外の値になりました。

さらに、varchar必要な形式はMM-DD-YYYY

私のエラーがどこにあるか知っている人はいますか?

ありがとう

4

2 に答える 2

1

あなたのコードは混乱しています:

DECLARE @YesterDay DATETIME, @Today DATETIME
SET @YesterDay = DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) 
SET @Today = DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0) 
select @YesterDay = convert(varchar, getdate()-1 , 110) 
select @Today = convert(varchar, getdate() , 110) 

したがって、DATETIME として宣言し、DateDiff で値を設定してから、別の方法を使用して再計算される日付の varchar 表現でその値を上書きします。

4 行目と 5 行目では、@Yesterday 変数と @Today 変数は、そのように宣言されているため、引き続き DATETIME です。

編集:私の回答へのコメントで述べたように、プロシージャに渡す変数が必要です。したがって、正しい修正は、最初に変数を VARCHAR(50) として宣言し、直接変換を行うことです。

DECLARE @YesterDay VARCHAR(50), @Today VARCHAR(50)
SELECT @YesterDay = convert(varchar(50), dateadd(dd, -1, getdate()) , 110) 
SELECT @Today = convert(varchar(50), getdate() , 110)

そして、最初に行った方法でプロシージャを呼び出します。

于 2012-06-08T08:38:28.517 に答える
0

私の推測では、getdate()-1の部分は間違っています。

また、あなたは作っていました、dateaddそしてdatediffなぜですか?このようにしてみてください:

SET @YesterDay = dateadd(dd, -1, GETDATE()) 
SET @Today = GETDATE() 
select @YesterDay = convert(varchar(50), dateadd(dd, -1, getdate()) , 110) 
select @Today = convert(varchar(50), getdate() , 110)
EXEC    @return_value = [dbo].[post_sec_admin_list_user_log]
        @pDateFr = @YesterDay ,
        @pDateTo = @Today,
        @pName = '',
        @pSec = NULL
于 2012-06-08T08:31:51.097 に答える