11月に作成されたすべての行を取得する簡単なクエリを実行しようとしています。
SELECT COUNT(*)
FROM dbo.profile
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000'
AND '2014-11-30 23:59:59.997';
SMSSは次を返します:
varcharデータ型をdatetimeデータ型に変換すると、値が範囲外になりました。
'Created'がdatetimeに設定されているときに、データがvarcharからdatetimeに変換される理由がわかりません。
「作成済み」が日時であることをサーバーに通知する必要がありますか?そうでない場合、なぜこのvarcharメッセージが表示されるのですか?
編集:データベースの値はでしたYYYY-MM-DD
。以下の@SqlZimからの返信は、convert()を使用してSQLにdbの日付の形式を伝え、スペース文字を文字Tで置き換える必要があることを示しています。
select count(*)
from dbo.profile
where [created] between convert(datetime,'2014-11-01T00:00:00.000')
and convert(datetime,'2014-11-30T23:59:59.997');`
CONVERT(DATE, '20141201')
、明示的にする必要性が他のすべてをオーバーライドした場合は、おそらく私はただやります。繰り返しになりますが、基になる列が日付/時刻型の場合、これは実際には必要ありません。と解釈されWHERE Active = CONVERT(BIT, 1)
ないように言いますか?WHERE Active = 1
INT