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は、 compareなどのように表されることがあります。これは変更できません。したがって、これを変更することはできません。00:00:00table 2table 3
  3. 1 つのレコードが、と00:00:00の両方の下に時間値を持つ場合があります。たとえば、 を参照してください。table.DateTime_Fromtable.DateTime_Totable 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:0007/06/2001 00:00:0007/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 に答える