3

現在の日付に基づいてテーブルからレコードを選択する SQL SELECT ステートメントがあります。私がやりたいのは、時間が一致しないため、タイムスタンプなしで日付を比較することです。デートだけは気になる。

ここに私が持っているものがあります:

string SQL = @"SELECT Trans_Set_Id FROM EDI10002 " +
             @"WHERE (Tp_Id = '" + tpid + "' AND Rec_Date = '" + DateTime.Now.ToShortDateString() + @"')";  

私が抱えている問題は、フィールド「Rec_Date」からのみ日付を取得する方法です。

4

6 に答える 6

4

SQL Server 2008 以降を使用している場合は、次のようにすることができます。

select cast( getdate() as date)
于 2013-03-08T17:26:46.997 に答える
2

それを行うための少し古風な方法は次のとおりです。

string SQL = "SELECT Trans_Set_Id FROM EDI10002 WHERE (Tp_Id = '" + tpid + "' AND CONVERT(varchar(10),Rec_Date, 101) = CONVERT(varchar(10), " + DateTime.Now.ToShortDateString() + ", 101))";

基本的にはMM/dd / YYYYに変換してから、最後を切り捨てます。

編集:getdate()を使用

string SQL = "SELECT Trans_Set_Id FROM EDI10002 WHERE (Tp_Id = '" + tpid + "' AND CONVERT(varchar(10),Rec_Date, 101) = CONVERT(varchar(10), getdate(), 101))";
于 2013-03-08T17:31:28.477 に答える
2

どのデータベースを使用していますか?

mssql http://msdn.microsoft.com/en-us/library/ms174420.aspxの DATEPART 関数をご覧ください。

于 2013-03-08T17:27:34.283 に答える
1

以下は、次のタイプに関係なく、SQLServerのすべてのバージョンで機能するはずですRec_Date

SELECT Trans_Set_Id 
FROM EDI10002 
WHERE Tp_Id = @tpid 
      AND (Rec_Date >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
           AND Rec_Date < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 1))

の使用はDATEADD(day, DATEDIFF(...), ...)、特定の日の始まりを取得します。これは、にインデックスが定義されてRec_Dateいる場合、それを使用して要求された行を取得できることを意味します。

于 2013-03-08T18:35:56.663 に答える
1

まず、文字列連結を使用して動的 SQL ステートメントを作成する習慣から抜け出し、パラメーター化されたクエリを使用する必要があります。

第二に、あなたの例では、クライアントから日付を提供する必要はありません.SQLですべて行うことができます.

string SQL = @"SELECT Trans_Set_Id FROM EDI10002 " +
   @"WHERE (Tp_Id = @tpid" + 
   @" AND convert(varchar(10, Rec_Date, 121) = CONVERT(varchar(10), getdate(), 121) )";

または2008を使用している場合

string SQL = @"SELECT Trans_Set_Id FROM EDI10002 " +
   @"WHERE (Tp_Id = @tpid" + 
   @" AND cast(Rec_Date as date) = cast(getdate() as date) )";

@tpid をパラメーターとして SQL コマンドに追加すれば完了です。

于 2013-03-09T03:29:16.850 に答える
1

TRUNC(Rec_Date)日付部分だけが気になり、時間部分を削除したい場合に使用してみてください。何かのようなもの:

... "' AND TRUNC(Rec_Date) = '" + DateTime.Today...

(これはOracleで機能しました...それは単にOracleのものかもしれません...)

于 2013-03-08T17:24:49.047 に答える