1. ホーム
  2. sql

[解決済み] SQLで日付を比較するクエリ

2022-03-01 13:15:40

質問

私は、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 は以下のタイプです。 日付

日付の書式はデフォルトで yyyy-dd-MM

解決方法

現地の文化に依存する「2013-04-12」の代わりに、文化不変のフォーマットとして認識される「20130412」を使用します。

12月4日と比較したい場合 th のように、'20130204'と書けばよい。4月12日と比較したい場合 th 20130412'と書いてください。

記事 国際的なTransact-SQLステートメントを書く SQL Server のドキュメントから、文化不変のステートメントの書き方を説明します。

<ブロッククオート

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

EDIT

ADO を使用しているので、クエリをパラメータ化し、日付の値を日付パラメータとして渡すのが最良の方法です。この方法では、書式の問題を完全に回避し、パラメータ化されたクエリのパフォーマンス上の利点も得られます。

アップデイト

ISO 8601形式をリテラルで使用するには、すべての要素を指定する必要があります。引用する場合 datetimeのドキュメントのISO 8601のセクションにあります。

<ブロッククオート

ISO 8601形式を使用するには、形式内の各要素を指定する必要があります。これには、書式に表示されるT、コロン(:)、ピリオド(.)も含まれます。

... 秒未満の端数はオプションです。時刻は 24 時間制で指定する。