好的,好的。我有一个有一列时间戳的数据库。 “日”的开始是早上7点。所以,今天说它将于2012年6月25日0700开始,并于2012年6月26日0700结束。我需要在24小时的时间内完成计算。现在,我正在考虑进行一个查询,从0700 + 24小时开始获取所有信息,但我不是100%关于如何表达所述查询。感谢您的帮助。
答案 0 :(得分: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;
}
答案 1 :(得分:1)
SELECT * FROM myTable WHERE timestamp >= 'start' AND timestamp < 'end'
请注意,排除了结尾,否则您将在下一个查询中再次查询它作为第二天的开头。
BETWEEN AND
运算符包括左侧和右侧运算符。如果时间戳是0700
,则必须决定是属于上一期还是新期。
答案 2 :(得分:-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'