単純なDateTimeSQLクエリ


83

特定の範囲内のDateTimeデータベースフィールドをクエリするにはどうすればよいですか?

SQL SERVER2005を使用しています

以下のエラーコード

SELECT * 
  FROM TABLENAME 
 WHERE DateTime >= 12/04/2011 12:00:00 AM 
   AND DateTime <= 25/05/2011 3:53:04 AM

特定の時間範囲内で行を取得する必要があることに注意してください。例、10分の時間範囲。

現在、SQLは「12」の近くに誤った構文で返されます。」


2
clycの答えは正しいです:引用符を追加する必要があります。私は以前にこの間違いを犯しました。where date = 1/12/2011たとえば、そうすると機能するように見えますが、実際には2011年1月12日を除算してゼロを取得し、ゼロを可能な最小の日時値として扱います。
ジョンギブ

回答:


116

一重引用符を見逃しました:

SELECT * 
FROM TABLENAME 
WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'

また、ISO8601形式YYYY-MM-DDThh:mm:ss.nnn [Z]を使用することをお勧めします。これは、サーバーのローカルカルチャに依存しないためです。

SELECT *
FROM TABLENAME 
WHERE 
    DateTime >= '2011-04-12T00:00:00.000' AND 
    DateTime <= '2011-05-25T03:53:04.000'

Msg 242、レベル16、状態3、行1も機能しません。charデータ型をdatetimeデータ型に変換すると、datetime値が範囲外になりました。
オベ

@ overule-2番目の例を使用してみてください
Alex Aza

@ overule-また、列に日時型があることを確認してください。
Alex Aza

3
@ Eric-yyyymmddには時間がありません。
Alex Aza

8

日付として渡そうとしている文字列を引用符で囲む必要があります。また、ここでBETWEENを使用することもできます。

 SELECT *
   FROM TABLENAME
  WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'

形式を指定しながら文字列を日付に明示的に変換する方法の例については、次の質問への回答を参照してください。

SQLServerの文字列から日付への変換


上記と同じエラー。メッセージ242、レベル16、状態3、行1 charデータ型を日時データ型に変換すると、日時値が範囲外になりました。私は本当に混乱しています。
オベ

ああ、私はちょうどあなたの日時をコピーしました、あなたは25/05を持っています、しかしそれはおそらく月/日付を期待しているのでそれらを両方とも切り替えてください。私は自分の答えを編集し、文字列を日付に明示的に変換する方法を示すSOの良い質問にリンクしました
Milimetric 2011年

6

これは、SQL Server2005と2008の両方で機能しました。

SELECT * from TABLE
WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'}
  AND FIELDNAME < {ts '2013-08-05 00:00:00.000'}

5

以下のコードを実行できます

SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14

1
SELECT * 
  FROM TABLENAME 
 WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
   AND [DateTime] <= '2011-05-25 3:35:04 AM'

これが機能しない場合は、テーブルのスクリプトを作成して、ここに投稿してください。これにより、正しい答えをすばやく得ることができます。


1
select getdate()

O/P
----
2011-05-25 17:29:44.763

select convert(varchar(30),getdate(),131) >= '12/04/2011 12:00:00 AM'

O/P
---
22/06/1432  5:29:44:763PM

1

SQL Serverの日付リテラルは一重引用符で囲む必要があるとすでに言っている人もいますが、月と日の混同の問題を2つの方法で解決できることを付け加えたいと思います(つまり、25が月と見なされ、5が月と見なされる問題です。日) :

  1. Convert(datetime, 'datevalue', style)スタイルが数値スタイルコードの1つである明示的なwhereスタイルを使用します。キャストと変換を参照してください。スタイルパラメータは、日付を文字列に変換するためだけでなく、文字列を日付に解析する方法を決定するためにも使用されます。

  2. 文字列として保存される日付には、地域に依存しない形式を使用します。私が使用しているのは 'yyyymmdd hh:mm:ss'であるか、ISO形式を検討してくださいyyyy-mm-ddThh:mi:ss.mmm。実験に基づくと、他の言語不変のフォーマット文字列はありません。(最後にタイムゾーンを含めることができると思いますが、上記のリンクを参照してください)。


0

SQLデータをエクスポートしようとしているアクセスファイルを開きます。そこにあるクエリをすべて削除します。SQL Serverインポートウィザードを実行するたびに、失敗した場合でも、SQLエクスポートウィザードを再度実行する前に削除する必要のあるクエリがAccessDBに作成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.