1

テーブルに挿入したいこのデータがあります。サンプルデータMM/DD/YYYY+ 1 日および12:00:00 PM

基本的に必要なのは、現在の日付 + 1 日と特定の時刻の 12:00:00 PM を挿入することです。

私のコードはこれです:

DECLARE @MyEstimatedDate as varchar(100)    ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate1 as varchar(100)   ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate2 as varchar(100)   ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate3 as DATETIME       ---FINAL DATA NEEDED. This is the data I want inserted.

SET @MyEstimatedDate = DATEADD(day,1,GETDATE()) 
SET @MyEstimatedDate1 = CONVERT(VARCHAR(100),@MyEstimatedDate,101)
SET @MyEstimatedDate2 = @MyEstimatedDate1 + ' 12:00:00 PM'
SET @MyEstimatedDate3 = cast(@MyEstimatedDate2 as datetime)  ---I believe this is the error

私が得るエラーメッセージ:

char データ型から datetime データ型への変換により、範囲外の datetime 値が発生しました。

4

3 に答える 3

2

varcharデータを操作するときは使用しないでくださいdatetime。SQL Server 2005には、変換を回避できる十分なツールが用意されています。

以下は、値から時間の部分を削除する多かれ少なかれ知られている方法です。datetime

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @InputDateTime), 0);

上記の例では、指定された日付とDATEDIFF指定された日付の間の日数を計算し0ます。DATEADD次に、関数によって日付に日数が追加され0ます。最終結果はdatetime、時刻が00:00:00で、日付が と同じ値@InputDateTimeです。これは、0日付が の整数表現であるためです1900-01-01 00:00:00。その時間部分はゼロであり、整数の日数だけインクリメントしたため、結果の時間部分もゼロです。

DATEDIFFここで、追加する日の代わりに を使用DATEDIFF+1すると、次の日になります。0さらに、インクリメントする日付の代わりにを使用12:00すると、希望どおりの翌日の正午が得られます。したがって、最終的な式は次のようになります。

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @InputDateTime) + 1, '12:00');

入力タイムスタンプは現在の日付と時刻であると想定されているため、次のように置き換え@InputDateTimeGETDATE()ください。

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) + 1, '12:00');
于 2013-02-10T20:53:37.607 に答える
0

datetime 型には日付 + 時刻が含まれます。@MyEstimatedDate1 の場合、日付だけが必要です

DECLARE @MyEstimatedDate varchar(100)    ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate1 varchar(100)   ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate2 varchar(100)   ---TEMPORARY CONTAINER
DECLARE @MyEstimatedDate3 DATETIME       ---FINAL DATA NEEDED. This is the data I want inserted.

SET @MyEstimatedDate = DATEADD(day, 1, GETDATE()) 
SET @MyEstimatedDate1 = CONVERT(VARCHAR(100), CAST(@MyEstimatedDate AS date), 101)
SET @MyEstimatedDate2 = @MyEstimatedDate1 + ' 12:00:00 PM'
SET @MyEstimatedDate3 = cast(@MyEstimatedDate2 as datetime)   ---I believ

またはそれを使用するのは簡単

SELECT DATEADD(hour, 36, GETDATE() - CAST(GETDATE() AS time))
于 2013-02-10T15:53:25.513 に答える
0

なぜ単純にしないのですか

cast(dateadd(day, 1, getdate()) as date)

それは真夜中だった。昼はこれやろ

dateadd(hour, 12, cast(cast(dateadd(day, 1, getdate()) as date) as datetime))  

上記を忘れてください、それは間違っています。

正解は

dateadd(hour, 12, cast(cast(dateadd(day, 1, getdate()) as date) as datetime))  

今回は私もそれをテストしました。

于 2013-02-10T15:48:22.630 に答える