当日期和时间在不同列中时,从表中进行选择
本文关键字:选择 行选 日期 时间 | 更新日期: 2023-09-27 18:13:23
在sqlServer中,我有一个旧的数据库,由于某种原因,将日期和时间存储在表的不同行中,因此我有
ID | ACTDate | ACTTime | NOTE
1 | 2016-02-17 00:00:00.000 | 1432 | Sold 4 boxes.
ACTDate
为DateTime
, ACTTime
为char(4)
。
我希望能够从我的winForm应用程序(c#)查询报告的数量在过去的X小时。所以我的查询是:
DateTime startDate = DateTime.Now.AddHours(-numHoursToLookBack);
SELECT NOTE FROM myTable WHERE ACTDATE >= '" + startDate.ToString("yyyy-MM-dd HH:mm:ss.fff") + "' "
显然,这不起作用,因为ACTDATE总是被查询当天的午夜。
因此,我需要一种在查询期间组合列的方法。我已经研究了在查询期间将列转换为类型的多种方法,但在这里,我需要将它们组合起来,然后转换它们,然后根据结果选择它们。很抱歉,我真不知道该从何说起。
任何帮助都是感激的!
当然,正确的操作应该是一个统一日期和时间的时间脚本,但是,如果这是不可能的,那么您应该使用两个where条件(并且只有当您的时间以前导零存储且小时数小于10时,这才有效)
DateTime startDate = DateTime.Now.AddHours(-numHoursToLookBack);
string initTime = startDate.ToString("hhmm");
// This is just as an example because you haven't provided more context
// but remember to never build query in this way. Use always parameters
SELECT NOTE FROM myTable WHERE ACTDATE >= '" +
startDate.ToString("yyyy-MM-dd") + "' AND ACTIME >= '" +
initTime + "'"
与参数 string query = @"SELECT NOTE FROM myTable
WHERE ACTDATE >= @date
AND ACTIME >= @time";
SqlCommand cmd = new SqlCommand(query, connection);
cmd.Parameters.Add("@date", SqlDbType.Date).Value = startDate;
cmd.Parameters.Add("@time", SqlDbType.Char, 4).Value = initTime;
// Execute the command
你可以这样做:
where actdate + cast(stuff(acttime, 3, 0, ':') as time) >= dateadd(hour, - $HOURS, getdate())