web-dev-qa-db-ja.com

SQLで日付を比較するクエリ

私は11月に起こったすべての日付の表を持っています。私はこの質問を書きました

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
created_date <= '2013-04-12'

このクエリは、11月(11月)に発生したすべてのものを返す必要があります。これは、の前の日付 '2013-04-12'(12月)

しかし、それは04より短い日に起こった利用可能な日付を返すだけです(2013 - 04 - 12)

それは日中の部分を比較しているだけなのでしょうか。丸一日じゃない?

これを修正するには?

Created_dateの型はdateです。

日付形式はデフォルトでyyyy-dd-MMです。

60
HelpASisterOut

その意味が地域の文化に依存する '2013-04-12'の代わりに、文化の不変形式として認識されている '20130412'を使用してください。

12月4日と比較したい場合番目、あなたは '20131204'と書くべきです。 4月12日と比較したい場合番目、あなたは '20130412'と書くべきです。

SQL Serverのドキュメントの 国際的なTransact-SQLステートメントの記述 では、カルチャに依存しないステートメントの記述方法について説明しています。

他のAPI、またはTransact-SQLスクリプト、ストアドプロシージャ、トリガを使用するアプリケーションは、分離されていない数値文字列を使用する必要があります。例えば、yyyymmddは19980924です。

編集

ADOを使用しているので、最良のオプションはクエリをパラメータ化し、日付パラメータとして日付値を渡すことです。これにより、フォーマットの問題を完全に回避し、パラメータ化クエリのパフォーマンス上の利点も得られます。

UPDATE

ISO 8601フォーマットをリテラルで使用するには、すべての要素を指定する必要があります。 datetimeのドキュメントのISO 8601セクションから引用する

ISO 8601フォーマットを使用するには、フォーマット内の各要素を指定する必要があります。これには、形式で示されているT、コロン(:)、およびピリオド(。)も含まれます。

...第二成分の端数はオプションです。時間コンポーネントは24時間形式で指定されます。

63

こんな感じ

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
created_date <= '2013-12-04'
26
Nithesh

日付の値とだけ比較している場合、それを日付に変換する(datetimeではない)場合はうまくいく

select id,numbers_from,created_date,amount_numbers,SMS_text 
 from Test_Table
 where 
 created_date <= convert(date,'2013-04-12',102)

この変換は、GetDate()関数の使用中にも適用されます。

6
Bimzee

あなたは<=を入れます、そしてそれは与えられた日付もキャッチします。あなたはそれを<だけで置き換えることができます。

4
Kuzgun

以下のクエリで試してください

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
convert(datetime, convert(varchar(10), created_date, 102))  <= convert(datetime,'2013-04-12')
2

日付の前後に「#」を使用し、システムの日付形式を確認してください。多分 "YYYYMMDD O YYYY-MM-DD O MM-DD-YYYY O USING '/ O \'"

例:

 select id,numbers_from,created_date,amount_numbers,SMS_text 
 from Test_Table
 where 
 created_date <= #2013-04-12#
1
Ren Marín

日付形式はyyyy-mm-ddです。そのため、上記のクエリは12Apr2013より古いレコードを探しています。

日付文字列を '2013-04-30'に設定してクイックチェックを実行することをお勧めします。SQLエラーがない場合、日付形式はyyyy-mm-ddに確認されます。

0
Bowie