0

そして。タイムスタンプの列を持つデータベースがあります。「一日」の始まりは午前7時。したがって、今日の場合、2012 年 6 月 25 日の 0700 に始まり、2012 年 6 月 26 日の 0700 に終わるとします。その 24 時間以内に計算を行う必要があります。今、0700 + 24 時間から始まるすべての情報を取得するクエリを実行することを考えていますが、そのクエリをどのように表現するかについては 100% ではありません。助けてくれてありがとう。

4

3 に答える 3

2

警告 - Visual Studio を使用せず、適切なエラー処理を行わずに頭のてっぺんからコードを作成しましたが、これは、パラメーター化されたクエリを使用して、必要なパラメーター値を正しく設定する方法を示しているはずです。これには構文エラーが含まれている可能性がありますが、ここでも、作業を進めるのに十分な情報が表示されるはずです。関連するコードを説明するコメントを追加しました。

private System.Data.DataTable ExecuteSql(DateTime BusinessDate)
{

    System.Data.DataTable ReturnValue = new System.Data.DataTable;
    string sql = "Select * From myTable WHERE TimestampColumn >= @StartDate AND TimestampColumn < @EndDate";
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDb.Command(connectionString, sql);

    // For start date, we can't assume the user has passed in a date with a 
    // midnight time, so first, use DateTime.Date to get JUST the date at midnight, 
    // then add 7 hours to get to the desired start time.
    // For example, if the calling code had passed in 1/1/2001 8:00 AM we would use
    // the .Date property to get it to 1/1/2001 12:00 AM
    // and then add 7 hours.

    cmd.Parameters.Add(@StartDate, BusinessDate.Date.AddHours(7));

    // The end date - same logic, but instead of adding 7 hours, add 31 
    // (24 hours + 7 hours = 31 hours)

    cmd.Parameters.Add(@EndDate, BusinessDate.Date.AddHours(31));  // 24 + 7
    System.Data.OleDb.OleDbDataAdapter ad = new System.Data.OleDb.OleDbDataAdapter(cmd);
    ad.Fill(ReturnValue)    

    return ReturnValue;
}
于 2012-06-25T22:01:58.290 に答える
1
SELECT * FROM myTable WHERE timestamp >= 'start' AND timestamp < 'end'

終了が除外されていることに注意してください。そうしないと、次のクエリで翌日の開始として再度クエリを実行することになります。

BETWEEN AND演算子には、左演算子と右演算子があります。タイムスタンプが正確にある0700場合は、それが最後の期間に属しているか、新しい期間に属しているかを判断する必要があります。

于 2012-06-25T22:03:18.120 に答える
-1
SELECT 
your_needed_columns 
FROM 
your_table 
WHERE 
your_timestamp_column BETWEEN 'start_timestamp' AND 'end_timestamp'

これは、サーバーが試行していることを達成する BETWEEN ステートメントを使用する例です。

Ollie のコメントによると、BETWEEN は包括的であるため、私の構文は意図的に結果に含まれる終了時刻に基づいています。他の人が述べているように、最初を含めて最後を除外したい場合は、およびを使用する必要があり>=ます<

SELECT 
your_needed_columns 
FROM 
your_table 
WHERE 
your_timestamp_column >= 'start_timestamp' AND your_timestamp_column < 'end_timestamp'
于 2012-06-25T21:51:33.010 に答える