日時フィールドがある場合、日付を完全に無視して、特定の時刻より後に作成されたレコードだけを取得するにはどうすればよいですか?
これはロギングテーブルであり、ユーザーがアプリケーションで接続して何かを実行していることを示します。午後5時以降の人の頻度を知りたい。
(申し訳ありませんが、SQL Serverです。しかし、これは他のデータベースの他の人々にとって役立つ可能性があります)
日時フィールドがある場合、日付を完全に無視して、特定の時刻より後に作成されたレコードだけを取得するにはどうすればよいですか?
これはロギングテーブルであり、ユーザーがアプリケーションで接続して何かを実行していることを示します。午後5時以降の人の頻度を知りたい。
(申し訳ありませんが、SQL Serverです。しかし、これは他のデータベースの他の人々にとって役立つ可能性があります)
SQL Serverの場合:
select * from myTable where datepart(hh, myDateField) > 17
http://msdn.microsoft.com/en-us/library/aa258265(SQL.80).aspxを参照してください。
どのデータベースシステムを使用していますか?日付/時刻関数は大きく異なります。
Oracleの場合、次のように言うことができます
SELECT * FROM TABLE
WHERE TO_CHAR(THE_DATE, 'HH24:MI:SS') BETWEEN '17:00:00' AND '23:59:59';
また、おそらく翌日にロールオーバーし、深夜から午前6時までの時間を選択する必要があります。
MySQL では、これは次のようになります。
where time(datetimefield) > '17:00:00'
私が考えることができる最も良いことは次のとおりです。DateTimeフィールドを使用しないでください。さて、あなたはたくさんのDATEADD / DATEPARTなどを使うことができますが、ここでは実際にインデックスを使うことができないので、たくさんのデータがあると遅くなります。DBは、SQL Server 2008のTIMEタイプなど、適切なタイプをネイティブに提供する場合がありますが、時間オフセットを分単位で簡単に保存することもできます(たとえば)。
わかりました、わかりました。
select myfield1,
myfield2,
mydatefield
from mytable
where datename(hour, mydatefield) > 17
これにより、午後5時以降のmydatefieldのレコードが取得されます。
Informixでは、DATETIME YEAR TO SECONDフィールドを使用して完全な日付を保持すると仮定すると、次のように記述します。
WHERE EXTEND(dt_column, HOUR TO SECOND) > DATETIME(17:00:00) HOUR TO SECOND
'EXTEND'は、実際にフィールドのセットを縮小できます(名前が示すように、フィールドを拡張することもできます)。
Thiloが指摘したように、これはDBMS間で極端に変動する領域です(そしてInformixは確かにバリアントの1つです)。
単純な状況に対する別のオラクルの方法:
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 メソッドも使用します。