1

样本数据

表格1

table.DateTime_From          |         table.DateTime_To
-----------------------------|--------------------------------
01/05/2001 00:00:00          |         01/05/2001 08:00:00
01/05/2001 08:00:00          |         01/05/2001 18:00:00
01/05/2001 18:00:00          |         01/05/2001 00:00:00
03/05/2001 00:00:00          |         03/05/2001 12:00:00
03/05/2001 12:00:00          |         03/05/2001 15:00:00
03/05/2001 15:00:00          |         03/05/2001 00:00:00
07/05/2001 00:00:00          |         07/05/2001 00:00:00
06/05/2001 00:00:00          |         06/05/2001 00:00:00
05/06/2001 00:00:00          |         05/06/2001 00:00:00
07/06/2001 00:00:00          |         07/06/2001 11:00:00
07/06/2001 11:00:00          |         07/06/2001 14:00:00
07/06/2001 14:00:00          |         07/06/2001 00:00:00

上表具有以下属性:

  1. 对于每条记录table.DateTime_From <= table.DateTime_To
  2. 24:00:00可悲的是,时间值有时表示为00:00:00例如比较table 2table 3- 这无法更改,因此更改它甚至不是一个选项。
  3. 单个记录有时可以00:00:00在 和 下都有时间值table.DateTime_Fromtable.DateTime_To例如参见table 4

表 2

table.DateTime_From          |         table.DateTime_To
-----------------------------|--------------------------------
01/05/2001 18:00:00          |         01/05/2001 00:00:00

表3

table.DateTime_From          |         table.DateTime_To
-----------------------------|--------------------------------
01/05/2001 18:00:00          |         01/05/2001 24:00:00

表 4

table.DateTime_From          |         table.DateTime_To
-----------------------------|--------------------------------
07/05/2001 00:00:00          |         07/05/2001 00:00:00

观察

  1. 使用MIN (table.DateTime_From)01/05/2001 00:00:00

  2. 尝试使用MAX (table.DateTime_To)会产生问题,因为这会给出07/06/2001 14:00:00- 尽管这实际上应该是07/06/2001 00:00:00ie 07/06/2001 24:00:00

  3. 请记住,07/06/2001 24:00:00它表示为07/06/2001 00:00:00- 因此使用MAX (table.DateTime_From).

问题

  1. 有没有办法解决使用观察到的问题MAX (table.DateTime_From),这样我就可以得到07/06/2001 00:00:00- 即使它对 . 的表示非常差07/06/2001 24:00:00

  2. 或者是否有一些我在这里不理解的基本细节......

4

1 回答 1

1

为什么不创建一个执行类似操作的视图(在 SQL Server 方言中)

SELECT table.DateTime_From
 , table.DateTime_To
 , CASE 
    WHEN DATEPART(table.DateTime_From, hour) = 0 
        AND DATEPART(table.DateTime_From, minute) = 0
        AND DATEPART(table.DateTime_From, second) = 0 
      THEN DATEADD(day, 1, table.DateTime_From)
    ELSE table.DateTime_From
   END AS DateTime_From_Corrected
 , CASE 
    WHEN DATEPART(table.DateTime_To, hour) = 0 
        AND DATEPART(table.DateTime_To, minute) = 0
        AND DATEPART(table.DateTime_To, second) = 0 
      THEN DATEADD(day, 1, table.DateTime_To)
    ELSE table.DateTime_To
   END AS DateTime_To_Corrected
FROM MyData table

然后您可以使用Corrected查询中的列?

于 2012-06-19T15:11:07.613 回答