当日期和时间在不同列中时,从表中进行选择

本文关键字:选择 行选 日期 时间 | 更新日期: 2023-09-27 18:13:23

在sqlServer中,我有一个旧的数据库,由于某种原因,将日期和时间存储在表的不同行中,因此我有

ID  | ACTDate                 | ACTTime | NOTE
1   | 2016-02-17 00:00:00.000 | 1432    | Sold 4 boxes.

ACTDateDateTime, ACTTimechar(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())