ホームページ  >  記事  >  データベース  >  MySQL の date_format との日付比較で予期しない結果が生じるのはなぜですか?

MySQL の date_format との日付比較で予期しない結果が生じるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 11:15:29632ブラウズ

Why Is MySQL Date Comparison with date_format Yielding Unexpected Results?

MySQL 日付と date_format の比較

複数の日付比較方法を試行したにもかかわらず、ユーザーは予期しない結果に遭遇しました。 「%d-%m-%Y」としてフォーマットされた日付を比較しようとしましたが、結果セットに誤ったレコードが含まれていました。

この問題は、日付ではなく文字列を比較することに起因します。 date_format 関数は日付を文字列に変換するため、比較が辞書編集順の影響を受けやすくなります。たとえば、「28-10-2012」はアルファベット順で「02-11-2012」より大きいため、時系列的に早いにもかかわらず結果セットに含まれます。

これを解決するには、比較を実行する必要があります。文字列の代わりに日付を使用します。日付関数を使用すると、DATETIME フィールドまたは DATE フィールドから日付コンポーネントを抽出できます。抽出された日付を比較することで、時系列順が保証されます。

例:

<code class="mysql">select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';</code>

このクエリでは、date(starttime) が starttime フィールドから日付を抽出し、それが比較されます。 YYYY-MM-DD 形式で指定された日付。 date_format 関数は、結果の書式設定にのみ使用されます。

starttime が DATETIME フィールドの場合は、次の使用を検討してください。

<code class="mysql">select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';</code>

このクエリは、比較が直接実行されるため、日付変換の繰り返しを回避します。 DATETIME フィールド。

ISO-8601 標準では日付形式として「YYYY-MM-DD」を使用することが推奨されていますが、提供されるコードはユーザーが指定した '%d-%m-%Y' 形式に準拠しています。 .

以上がMySQL の date_format との日付比較で予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。