質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

5259閲覧

SQL 日をまたぎ決まった時間のデータを抽出したい

WaterSausage

総合スコア3

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/10/08 13:25

前提・実現したいこと

ユーザーのアクセスログをまとめたテーブルがあります。
次の条件でデータを取得したいです。

条件:前日の05:00:00 - 当日の04:59:59までのデータ

課題:日付をまたいだ条件がわかりません

####Logテーブル

DateActionUserName
2020/10/7 04:12:02loginTaro
2020/10/7 07:50:13logoffTaro
2020/10/7 08:21:34loginHanako
2020/10/8 02:04:36logoffHanako

試したこと

例えば、次の条件なら必要なデータは取得できました。
しかし、日にちをまたぐとなるとやはり条件式がわかりません。

条件:前日の05:00:00 - 前日の21:00:00までのデータ

sql

1SELECT * 2FROM Log 3WHERE Date BETWEEN DATEADD (DAY, -1 GETDATE()) AND GETDATE 4 AND CONVERT (time, Date) BETWEEN '05:00:00' AND '21:00:00'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

日付じゃなくて、時間をずらすのです。

SQL

1WHERE Date >= dateadd(hour, -19, convert(datetime, convert(date, getdate()))) 2 and Date < dateadd(hour, 5, convert(datetime, convert(date, getdate())))

投稿2020/10/08 15:36

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WaterSausage

2020/10/09 12:45

ご回答ありがとうございます。 それがあったか!とッハとしました。 シンプルな感じがしましたし、狙ったデータを抽出することができました。 ありがとうございました。
guest

0

Dateの型が不明だけど、こんな書き方もできますよ

SQL

1WHERE Date 2BETWEEN DATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()) - 1, 5, 0, 0, 0) 3 AND DATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 4, 59, 59, 999)

投稿2020/10/08 13:41

kuma_kuma_

総合スコア2506

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WaterSausage

2020/10/09 12:43

ご回答ありがとうございます。 Dateの型が違ったためかうまく動作しませんでした。 すみませんSQL初心者な為、すぐに型を確認できませんでした。 しかしながらこの方法も使えることを今後の参考に致します。ありがとうございます。
guest

0

条件:(前日の05:00:00-23:59:59) OR (当日の00:00:00-04:59:59)
ではだめですか?

投稿2020/10/08 13:38

Gak

総合スコア83

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WaterSausage

2020/10/09 12:41

ご回答ありがとうございます。 DAYだけGETDATE()関数使って、Timeだけ決め打ちという式の書き方がどうしても思いつかなかったのです…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問