2016-07-28 15 views
-1

datetimeオブジェクトをSQL Serverで2つの日付の間でソートしようとしています。私はそれを実行すると、結果はフィルタリングされましたが、適切にはフィルタリングされませんでした。SQL Serverの日時ソート

私のコードに戻ってくる結果は以下のようになり

where 
    cast(tbRegistrant.DateEntered as date) >= cast('2015-07-01' as date) 
    and tbRegistrant.DateEntered <= cast('2016-06-30' as date) 

2008-08-06 14:14:55.000 
2015-06-09 10:18:02.000 
2014-11-25 14:18:24.000 
2014-11-24 14:11:23.000 
2014-11-24 14:06:14.000 
2015-01-30 13:41:25.000 
2008-08-06 13:23:58.000 
2014-06-19 12:22:27.000 
2014-11-25 15:30:15.000 
2014-11-25 08:13:52.000 
2014-11-24 14:12:55.000 
2015-07-13 08:20:28.000 
+0

を試してみてください?また、「正しくない」とはどういう意味ですか? –

+1

どのような結果が得られますか?どのようにして、彼らは「適切に」分類されていませんか?生データとソート結果を投稿してください。 –

+0

yesフィルタを適用し、指定した2つの日付の間に日付ではなくランダムな日付を返します – DennisOakdale

答えて

2

あなたの第二の条件doesntのCASTなどがあります。次のようになります。

まだ
where cast(tbRegistrant.DateEntered as date) >= cast('2015-07-01' as date) 
    and cast(tbRegistrant.DateEntered as date) <= cast('2016-06-30' as date); 

OR

where cast(tbRegistrant.DateEntered as date) 
     BETWEEN cast('2015-07-01' as date) and cast('2016-06-30' as date); 

でも良く、DATEないTEXTとしてあなたの日付を保存します。今すぐあなたの検索のための任意のインデックスを使用することはできません。

EDIT:

DEMO OP "間違った" データクエリで正しいフィルタをもたらします。それでは別のことがあるかもしれません。

enter image description here

そして、あなたのフィールドがある場合 datetimeあなたは CASTを必要といけません。あなたは、 "並べ替え" あなたが意味するか、 "フィルタ" と言うとき

SELECT * 
FROM myTable 
where [DateEntered] >= cast('2015-07-01' as date) 
    and [DateEntered] <= cast('2016-06-30' as date); 
+0

データベースにdatetimeとして保存され、その構文は機能しません。 – DennisOakdale

+1

"その構文はうまくいかない"ということはどういう意味ですか?あなたはエラーを受け取りますか?はいの場合はどちらですか? –

+0

@DennisOakdaleあなたはどうしていますか? CASTは2008年以降も有効です。 – scsimon

0

where cast(tbRegistrant.DateEntered as date) >= cast('20150701' as date) 
    and CAST(tbRegistrant.DateEntered) <= cast('20160630' as date)