20

日時フィールドがある場合、日付を完全に無視して、特定の時刻より後に作成されたレコードだけを取得するにはどうすればよいですか?

これはロギングテーブルであり、ユーザーがアプリケーションで接続して何かを実行していることを示します。午後5時以降の人の頻度を知りたい。

(申し訳ありませんが、SQL Serverです。しかし、これは他のデータベースの他の人々にとって役立つ可能性があります)

4

8 に答える 8

20

SQL Serverの場合:

select * from myTable where datepart(hh, myDateField) > 17

http://msdn.microsoft.com/en-us/library/aa258265(SQL.80).aspxを参照してください。

于 2008-10-06T23:36:48.763 に答える
7

どのデータベースシステムを使用していますか?日付/時刻関数は大きく異なります。

Oracleの場合、次のように言うことができます

SELECT * FROM TABLE 
  WHERE TO_CHAR(THE_DATE, 'HH24:MI:SS') BETWEEN '17:00:00' AND '23:59:59';

また、おそらく翌日にロールオーバーし、深夜から午前6時までの時間を選択する必要があります。

于 2008-10-06T23:36:08.623 に答える
4

MySQL では、これは次のようになります。

where time(datetimefield) > '17:00:00'
于 2008-10-07T02:19:39.590 に答える
1

私が考えることができる最も良いことは次のとおりです。DateTimeフィールドを使用しないでください。さて、あなたはたくさんのDATEADD / DATEPARTなどを使うことができますが、ここでは実際にインデックスを使うことができないので、たくさんのデータがあると遅くなります。DBは、SQL Server 2008のTIMEタイプなど、適切なタイプをネイティブに提供する場合がありますが、時間オフセットを分単位で簡単に保存することもできます(たとえば)。

于 2008-10-06T23:35:26.923 に答える
0

わかりました、わかりました。

select myfield1, 
       myfield2, 
       mydatefield
  from mytable
 where datename(hour, mydatefield) > 17

これにより、午後5時以降のmydatefieldのレコードが取得されます。

于 2008-10-06T23:37:12.380 に答える
0

Informixでは、DATETIME YEAR TO SECONDフィールドを使用して完全な日付を保持すると仮定すると、次のように記述します。

WHERE EXTEND(dt_column, HOUR TO SECOND) > DATETIME(17:00:00) HOUR TO SECOND

'EXTEND'は、実際にフィールドのセットを縮小できます(名前が示すように、フィールドを拡張することもできます)。

Thiloが指摘したように、これはDBMS間で極端に変動する領域です(そしてInformixは確かにバリアントの1つです)。

于 2008-10-10T21:51:59.270 に答える
0

単純な状況に対する別のオラクルの方法:

select ...
from   ...
where  EXTRACT(HOUR FROM my_date) >= 17
/

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions050.htm#SQLRF00639

ただし、15:03:21 から 15:25:45 までのすべてのレコードのように、いくつかの質問には注意が必要です。そこで TO_CHAR メソッドも使用します。

于 2008-10-07T01:35:21.707 に答える