2012-01-03 3 views
1

は私がdatefromとdateto間の日付を確認したい上記の表から、日付の間の値どのように、もし

表1

Code Period Datefrom dateto  Value 
001 07/2011 01/07/2009 10/07/2009 100 
211 07/2009 01/07/2009 05/07/2009 200 

を選択したい二つの日付の値を取得します日付はdateto手段datefromする間、または等しい、それはempcode

試みたクエリの値を返すべきである

SELECT Value 
FROM table1 
Where Period = '07/2009' 
and Code = '211' 
and Cast('02/07/2009' as Datetime) between datefrom and dateto 

予想される出力:

code value 
211 200 

上記のクエリは、NULL値を示している、それは返す必要があります

200私のクエリでは何が問題?

+1

を使用することができ、あなたの列datetime型またはvarcharていますか? Where句で 'YYYYMMDD'を使用して、SQL Serverが1か月と1日で混在しないようにすることができます。 –

+0

データ型を知ることができるように、テーブルのスキーマを投稿してください。私はコードと値がvarcharであると想定していましたか? –

答えて

3

あなたCast('02/07/2009' as Datetime)はデフォルト 使用して2月7日あなたに、この代わりに

SELECT Code, Value 
FROM table1 
Where 
    Period = '07/2009' 
and Code = '211' 
and CONVERT(DATETIME, '02/07/2009', 103) between datefrom and dateto 

しかし

をもたらし、おそらく彼らはvarchar型のタイプである場合datefromdateto列あまりにを変換する必要があります。

+0

私はそれが2月7日だと思う:-)そして、あなたはそれらの列を変換する必要はありません(文字列ではなく) –

+0

@HansKestingはい、日付については見逃していますが、すでに列8について書いています) –

0
SELECT Code, Value 
from table1 
where Period = '07/2009' 
and Code = '211' 
and DateFrom <='02/07/2009' 
and DateTo >= '02/07/2009' 
+0

Wrong !文字列の日付を英字形式に変換する必要があります。クエリは選択リストのコード列を除いて同じです –

-1

あなたは以下のクエリ

SELECT code 
     , value 
FROM table1 
WHERE period = '07/2009' 
AND code = '211' 
AND convert(datetime,'02/07/2009',101) 
     between 
     convert(datetime,datefrom,101) and convert(datetime,dateto,101) 
+0

間違っています!日付形式はイギリス/フランスではありません。 –

関連する問題