0

こんにちは、私は複数のレコードを持つテーブル費用を持っています。

expenseID       ratename         description            workcompleted

51699           Base Rate        SNL Financial inquiry  08/09/2011
51699           Base Rate        SNL Financial inquiry  08/19/2011
51699           Base Rate        SNL Financial inquiry  08/09/2012
51699           Base Rate        SNL Financial inquiry  08/19/2012

しかし、2012年のレコードのみを検索すると、両方の年(2011年、2012年)のレコードが返されます。しかし、私は私の記録が年だけで来る必要があります。

予想された結果:

51699   Base Rate   SNL Financial inquiry   08/09/2012
51699   Base Rate   SNL Financial inquiry   08/19/2012

私のクエリを見てください:

select expenseid,ratename,description,workcompleted from EXPENSES 
where workcompleted >= '08/08/2012' and workcompleted <= '08/19/2012'

クエリ間を使用してこれも試しましたが、機能しません。アイデアがある場合は、親切に私に共有してください。

4

2 に答える 2

3

ほとんどの場合、間違ったデータ型を使用しています。列「work_completed」は日付型である必要があります。ほぼ確実に char または varchar です。最善の策は、データ型を変更することです。

それができない場合は、テーブルをミラーリングするビューを作成できますが、「work_completed」列を日付型にキャストします。このようなビューに対する日付範囲のクエリは正しく機能するはずです。

ビューを作成できない場合は、WHERE 句を変更してキャストを行うことができます。標準 SQL では、次のようになります。

WHERE CAST(workcompleted AS DATE) >= '2012-08-08' 
  AND CAST(workcompleted AS DATE) <= '2012-08-19'

SQL Server が CAST() をサポートしていることは知っていますが、おそらく日付の元の形式 (「08/08/2012」など) を使用する必要があります。

それを行うと、パフォーマンスが低下することが予想されます。SQL Server は、すべての行で 2 つの型キャストを行う必要があります。

于 2012-12-06T05:45:12.690 に答える
2

これを見てください。クエリを実行すると、必要な結果が得られます。@ paulsm4が尋ねたような何か他に必要なものがあるかもしれませんか?

リファレンス* SQLFIDDLE

あなたの質問:

select id,name,des,
wkdate from EXPENSES 
where wkdate >= '2012-08-08' 
and wkdate <= '2012-08-19'
;

結果

ID      NAME        DES                     WKDATE
51699   Base Rate   SNL Financial inquiry   August, 09 2012 00:00:00+0000
51699   Base Rate   SNL Financial inquiry   August, 19 2012 00:00:00+0000

上記のサンプルはMYSQLで作成されています。また、年ごとにレコードを取得するもう1つの簡単な方法は、次のようなクエリを使用することもできます...これはSQLServerにあります

select id,name,des,
wkdate from EXPENSES 
where YEAR(wkdate) = '2012'
;

SQLSERVERTSQLの年に関するこのMSDN記事をご覧ください。

** OPのコメントに基づく**いずれにせよ、日付列がnvarcharの場合は、日付に変換/キャストしましょう。

select id,name,des,
wkdate from EXPENSES 
where YEAR(CAST(wkdate AS Date)) = '2012'
;
于 2012-12-06T05:35:34.083 に答える