8

Users:</p> というテーブルがあります

CreateTime                     UserName
========================================
2012-08-30 14:23:12:000           zhang
2012-08-30 15:11:13:000           li
2012-08-30 16:32:22:000           wang
2012-08-31 11:23:12:000           steven
2012-08-31 12:05:14:000           zhao
2012-08-31 08:23:12:000           ddd

とクエリ:

select UserName 
from Users  
where CreateTime >= '2012-08-30' and CreateTime <= '2012-08-31' 

したがって、結果は6行になるはずですが、そうではありません。

これを解決する方法は?

SQL ServerConvert関数を使用していますCONVERT(VARCHAR(23), CreateTime, 121)か?

4

7 に答える 7

18

2012-08-31はインタープリターによって として受信されるため、6 行は表示されません2012-08-31 00:00:00 AM。31 日までのデータを表示したいので、時刻を明示的に指定するか、翌日の日付をクエリすることができます。

翌日の日付を使用した例

SELECT UserName 
FROM Users  
WHERE CreateTime >= '2012-08-30' AND CreateTime < '2012-09-01'

明示的に言及された時間の例

SELECT UserName 
FROM Users  
WHERE CreateTime >= '2012-08-30 00:00:00' AND CreateTime < '2012-09-31 23:59:59'
于 2012-08-31T07:09:44.630 に答える
15

あなたが必要とするのは、CASTあなたのCreateTimefromDatetimeDate次のようにすることだけです:

SELECT  UserName FROM Users 
WHERE CAST(CreateTime as date)>='2012-08-30' 
AND CAST(CreateTime as date)<= '2012-08-31';

BETWEENの代わりに次<=>=ように使用することもできます。

SELECT  UserName FROM Users 
WHERE CAST(CreateTime as date) BETWEEN 
'2012-08-30' AND '2012-08-31';

このSQLFiddleを参照してください

于 2012-08-31T07:22:39.890 に答える
2

基本的な問題は、単純に日付を入力すると、SQL Server がその日付をその日の午前 0 時と解釈することです。したがって、「2012-08-31」と尋ねると、実際には「2012-08-31 12:00AM」を意味します。

最善の解決策は、希望する日を 1 日超えて、以下ではなく以下を使用することです。

select  UserName from  Users  where CreateTime>='2012-08-30' and CreateTime < '2012-09-01'
于 2012-08-31T07:04:48.033 に答える
0

これを試して

select  UserName 
from  Users  
where CreateTime>='2012-08-30' and CreateTime<'2012-09-01'
于 2012-08-31T07:04:40.843 に答える
0

CreateTime<='2012-08-31'タイム スタンプが午前 0 時以降であるため、最後の 3 つの日付には当てはまりません。2012-08-31は の略な2012-08-31 00:00:00ので、最初の 3 行だけが返されます。

常にタイムスタンプを含める必要があります-またBETWEEN、他の回答で提案されているように使用することをお勧めします。

于 2012-08-31T07:06:33.200 に答える
0
select  UserName from  Users  where CreateTime>='2012-08-30' and CreateTime < '2012-09-01'
于 2012-08-31T07:08:27.393 に答える