2016-10-04 4 views
1

私の仕事では、SQLデータベースから情報を取得するためのクエリを作成しようとしています。これはうまくいきますが、日付範囲を使用しようとすると、それは動作して停止します。日付間のSQLデータベースからstuffを選択するにはどうすればいいですか?

Iは、上記の例で

SELECT 
* 
FROM 
InlogLog as il 
INNER JOIN 
ComputerIdentity as ci 
ON il.Computer = ci.Description 
WHERE ci.Location 
LIKE 'E18%' 
AND ci.MakeModelID = 9 
AND DATEPART(YY,il.Datum) = 2016 
AND DATEPART(MM,il.Datum) = 10 
AND DATEPART(DD,il.Datum) = 03 
ORDER BY il.Computer 

をDATEPART関数を考え出した、私は2つの日付の間の範囲を指定することはできません。 Iも

SELECT 
* 
FROM 
InlogLog as il 
INNER JOIN 
ComputerIdentity as ci 
ON il.Computer = ci.Description 
WHERE ci.Location 
LIKE 'E18%' 
AND ci.MakeModelID = 9 
AND il.Datum = '2016-06-17 09:57:00.000' 

この例を使用しようとしているが、これはエラーメッセージ

日時データ型にvarcharデータ型の変換の結果は、範囲外の値をもたらしました。

この次の例はどのように動作させることができますか?

SELECT 
* 
FROM 
InlogLog as il 
INNER JOIN 
ComputerIdentity as ci 
ON il.Computer = ci.Description 
WHERE ci.Location 
LIKE 'E18%' 
AND ci.MakeModelID = 9 
AND il.Datum '2016-06-17 09:57:00.000' BETWEEN '2016-06-18 00:00:00.000' 

答えて

1

をお試しくださいルックス

SELECT 
* 
FROM 
InlogLog as il 
INNER JOIN 
ComputerIdentity as ci 
ON il.Computer = ci.Description 
WHERE ci.Location 
LIKE 'E18%' 
AND ci.MakeModelID = 9 
AND CONVERT(DATE, ilDatum) >= CONVERT(DATE, '2016-10-01') 
AND CONVERT(DATE, ilDatum) <= CONVERT(DATE, '2016-10-04') 

注:varcharを日付型に変換してil.Dat um。特にvarchar型の変換がなければ、日付をフィルタリングすることはできません。

+1

これは解決策です。ありがとうございます! –

2

問題は、構文(il.Datum '2016-06-17 09:57:00.000' BETWEEN '2016-06-18 00:00:00.000')であり、以下のようなスクリプトを変更します。

カラムがvarcharの場合は、datetimeに変換します。

SELECT * 
FROM 
InlogLog as il 
INNER JOIN 
ComputerIdentity as ci 
ON il.Computer = ci.Description 
WHERE ci.Location 
LIKE 'E18%' 
AND ci.MakeModelID = 9 
AND CAST(il.Datum as datetime) BETWEEN '2016-06-17 09:57:00.000' AND '2016-06-18 00:00:00.000' 
1

データムが、それはdatetimeデータ型

のものでなければならないvarcharデータ型であるようil.Datumは、varchar型のタイプであれば、あなたがキャストを行う必要があり、この

SELECT 
* 
FROM 
InlogLog as il 
INNER JOIN 
ComputerIdentity as ci 
ON il.Computer = ci.Description 
WHERE ci.Location 
LIKE 'E18%' 
AND ci.MakeModelID = 9 
AND il.Datum >='2016-06-17 09:57:00.000' il.Datum<= '2016-06-18 00:00:00.000' 
0
SELECT * FROM InlogLog as il INNER JOIN 
ComputerIdentity as ci 
ON il.Computer = i.Description WHERE ci.Location 
LIKE 'E18%' AND ci.MakeModelID = 9 AND 
DATEDIFF(DAY,ilDatum,'2016-06-17') <= 0 AND 
DATEDIFF(DAY,ilDatum,'2016-06-18') >=0 
関連する問題