MySQL 側または Perl 側で SQL 結果に空の日付を入力するにはどうすればよいですか?また最も簡単な方法は何ですか?
P粉448346289
P粉448346289 2023-08-24 13:14:12
0
2
459

次のようなクエリを使用して、mysql テーブルから簡単な CSV を作成しています。

select DATE(date),count(date) by DATE(date) order by date asc;

次に、それらを Perl のファイルに直接ダンプします。

while(my($date,$sum) = $sth->fetchrow) { CSV「$date,$sumn」を出力 }

ただし、データには日付のギャップがあります:

| 2008-08-05 | 4 | | 2008-08-07 | 23 |

欠落している日付をゼロカウントのエントリで埋めてデータを埋め込み、最終的に次のようにしたいと考えています。

| 2008-08-05 | 4 | | 2008-08-06 | 0 | | 2008-08-07 | 23 |

私は、月の日付の配列といくつかの数学を使用して、非常に不器用な (ほぼ確実にバグが多い) 回避策をまとめましたが、mysql または perl には、より直接的な方法があることは間違いありません。

なぜ私がそんなに愚かなのかについての天才的なアイデア/提案はありますか?


最終的に、いくつかの理由から、ストアド プロシージャを使用して、必要な日付範囲を処理する一時テーブルを生成することにしました。

  • 毎回検索する日付範囲はわかっています
  • 残念ながら、このサーバーは現在 Perl モジュールをインストールできません。また、Date::-y のようなものがインストールされていないほどひどい状態です

Perl の回答での日付/時刻の反復も非常に優れています。複数の回答を選択できればいいのにと思います。

P粉448346289
P粉448346289

全員に返信 (2)
P粉733166744

この問題に対処する必要があり、欠落している日付を埋める必要があるとき、私は実際に、関心のあるすべての日付だけを含む参照テーブルを作成し、日付フィールドのデータ テーブルを結合しました。粗雑で粗雑ですが、機能します。

リーリー

出力に関しては、CSV を手動で生成する代わりに、SELECT INTO OUTFILEを使用します。こうすることで、特殊文字のエスケープについて心配する必要がなくなります。

いいねを押す+0
    P粉593649715

    サーバー側で同様のことが必要な場合は、通常、2 つの時点の間のすべての可能な日付を含むテーブルを作成し、クエリ結果を使用してこのテーブルに左結合を実行します。次のようなもの:

    リーリー

    この特定のケースでは、クライアント側で何らかのチェックを行い、現在の日付が前日の翌日でない場合は文字列を追加した方がよいでしょう。

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!