2017-09-25 2 views
-1

私は特定の日時に発生した顧客契約を見つけようとしていますWHERE句を使用して日付と時間範囲をフィルタリングするにはどうすればよいですか?

私は日付部分が正しいと思いますが、時間を正しく設定することはできません。

SELECT EngagementNumber, 
     StartDate, 
     StartTime 
FROM Engagements 
WHERE StartDate LIKE '2012-10-%%' 
     AND StartTime BETWEEN '12:00:00.0000000' AND '17:00:00.0000000'; 
+4

sql-serverとmysqlは異なるものを指します。 –

+3

StartTimeのデータ型は何ですか? –

+1

テーブル定義とサンプルデータセットを提供 –

答えて

0

ダウンボートがある理由の1つは、2つのデータベースで質問にタグを付けるように選択したためです。ただし、それぞれの構文は非常に異なります。

もう1つは、「重要な事実」がなければ、私たちは推測のままです。例えばwhat is the datatype of StartTime ??データ型がDATEの場合はWHERE StartDate LIKE '2012-10-%%'が失敗しますが、データ型がVARCHARまたはそれと類似していれば、それは機能します(並べ替え)。 StartTimeのデータ型も知っておく必要があります。だから、

  1. 場合は、MySQLを使用している
  2. 開始日のデータ型は、日付
  3. のStartTimeのデータ型は以下

時間であるの一例ですどのようにクエリが動作する可能性があります、デモを参照SQL Fiddle

サンプルデータ(MySQLの)

CREATE TABLE Engagements 
    (`EngagementNumber` int, `StartDate` datetime, `StartTime` time) 
; 

INSERT INTO Engagements 
    (`EngagementNumber`, `StartDate`, `StartTime`) 
VALUES 
    (1, '2017-09-01 00:00:00', '13:14:15'), 
    (2, '2017-10-01 00:00:00', '14:15:16'), 
    (3, '2017-10-11 00:00:00', '15:16:17') 
; 

クエリ1

SELECT EngagementNumber, 
     StartDate, 
     StartTime 
FROM Engagements 
WHERE StartDate >= '2017-10-01' and StartDate < '2017-11-01' 
AND StartTime BETWEEN '12:00' AND '17:00' 

Results

| EngagementNumber |   StartDate | StartTime | 
|------------------|----------------------|-----------| 
|    2 | 2017-10-01T00:00:00Z | 14:15:16 | 
|    3 | 2017-10-11T00:00:00Z | 15:16:17 | 

が同じであることに注意してくださいクエリはSQL Serverでも動作しますが、データ型はここで仮定したものと同じです。

最後のメモ。データ型が日付&である場合、そのように見えるかもしれませんが、データ型は文字列ではありません(テキスト)。だからLIKE '2012-10%'は動作しませんが、日付/時刻情報をスティングとして保存することは、とにかく良い考えではありません。

+0

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、[** Click The Tick **](https://ibb.co/ikqyO6) –

関連する問題