0

私はsqlserver 2005を使用しています。

次の重要な列を含むテーブル tradefile があります。

Scrip_Code : nvarchar(25)
Sauda_Date : datetime   [value example: 3/1/2013 9:15:04 AM]
TradeType  : nvarchar(5)
Market_Rate: float

特定の sauda_date、scrip_code、および tradetype の市場レートの平均を取りたかったのです。

そのために、次のクエリを実行しました。

select avg(Market_Rate) 
from tradefile 
where 
Scrip_Code='ACC' and 
Sauda_Date =convert(datetime,'03/21/2013') 

このクエリは null 値を返します。

上記のクエリの間違いは何ですか?

注: sauda_date は datetime であり、上記の例に示すように時刻と日付の両方があります [3/1/2013 9:15:04 AM]

私を導いてください。

4

2 に答える 2

2
SELECT CONVERT(DATETIME,'03/21/2013')

上記を実行すると、次のように出力されます。

2013-03-21 00:00:00.000

したがって、これを時間のあるものに一致させようとします。

2013-03-21 09:15:04.123

明らかに一致しません。

両方を DATE に変換する必要があります。

Sauda_Date >= CONVERT(DATETIME, '03/21/2013') AND 
Sauda_Date < DATEADD(dd, 1, CONVERT(DATETIME, '03/21/2013'))

この回答から派生しました。

テスト

編集:は SQL Server 2005 で定義されておらず、悪い考えである可能性があるCONVERT(DATE, Sauda_Date)ため、アプローチを削除しました。DATE

于 2013-04-10T11:02:04.253 に答える
0

間違いは、where句がすべての行を除外したこと、またはそれMarket_Rateが常にだったことNULLです。次のデバッグ クエリを実行して確認します。

select * --debug
from tradefile 
where 
Scrip_Code='ACC' and 
Sauda_Date =convert(datetime,'03/21/2013') 
于 2013-04-10T10:44:45.980 に答える