1

SQL Server からの取得に問題があったため、[質問][1] を投稿しました。

適切な回答が得られませんでした。そのため、列のデータ型を からdatetimeに変更したところ、varchar正常に動作するようになりました。

SELECT *  
FROM test
WHERE (timeStamp BETWEEN '05-09-2013 18:23:57' AND '05-09-2013 18:23:59')

varcharしかし、データ型が役割を果たすことができ、文字列も格納できる場合、私のクエリはなぜSQLがデータ型を提供するのdatetimeですか? よりも多くのスペースを占めることはわかっています。他の理由も知りたいです。varchardatetimevarchardatetime

4

3 に答える 3

5

列のデータ型を に変更しますdatetime。where句でvarcharの代わりにdatetimeを使用する場合は、クエリを実行できます。

select *
from test
where timeStamp between convert(datetime, '2013-09-05 18:23:57', 120) and convert(datetime, '2013-09-05 18:23:59', 120)

日付のISO形式を使用する場合、暗黙のキャストでも機能すると確信しています:

select *
from test
where timeStamp between '2013-09-05 18:23:57' and '2013-09-05 18:23:59'

cast と convertの詳細については、こちらをご覧ください。

于 2013-09-16T09:19:54.687 に答える
2

スペース以外のもう 1 つの理由は次のとおりです。

Datetimeには、日、年、月、時、分、秒などを取得するなどの他の機能があるため、自分で記述する必要はありません。varcharを使用する場合は、将来使用する関数を提供する責任があります。分割機能を使用して、必要な日付の部分を取得する必要があります。

もう 1 つは、月/日/年を比較する条件を使用する場合、 Datetimeと比較すると、 varcharに対するクエリの動作が遅くなることです。

于 2013-09-16T09:28:12.880 に答える
1

日付と時刻の値を格納するには、常に適切な DATETIME データ型を使用してください。詳細については、これを参照してください http://beyondrelational.com/modules/2/blogs/70/posts/10902/understanding-datetime-column-part-iv.aspx

于 2013-09-16T10:04:44.807 に答える