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 是包容性的,所以我的语法是基于有意包含在结果中的结束时间。正如其他人所说,如果您希望包含开头但排除结尾,那么您必须使用>=and<

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 回答