Rumah  >  Soal Jawab  >  teks badan

Bagaimanakah cara mengisi tarikh kosong dalam hasil SQL, sama ada pada sisi MySQL atau Perl, dan apakah cara yang paling mudah?

<p>Saya sedang membina csv pantas daripada jadual mysql menggunakan pertanyaan seperti: </p> <pre class="brush:php;toolbar:false;">pilih TARIKH(tarikh),kira(tarikh) daripada kumpulan jadual mengikut TARIKH(tarikh) susunan mengikut tarikh asc;</pre> <p>Kemudian buangnya terus ke dalam fail dalam perl: </p> <pre class="brush:php;toolbar:false;">while(my($date,$sum) = $sth->fetchrow) { cetak CSV "$tarikh,$sumn" }</pre> <p>Walau bagaimanapun, terdapat jurang tarikh dalam data: </p> <pre class="brush:php;toolbar:false;">| 2008-08-05 | |. 2008-08-07 |. <p>Saya ingin mengisi data, mengisi tarikh yang hilang dengan entri kiraan sifar, dan berakhir dengan: </p> <pre class="brush:php;toolbar:false;">| 2008-08-05 | |. 06-08-2008 | |. 2008-08-07 |. <p>Saya menyusun penyelesaian yang sangat kekok (hampir pasti buggy) menggunakan pelbagai hari dalam sebulan dan beberapa matematik, tetapi pasti ada cara yang lebih langsung, sama ada dalam mysql atau perl. </p> <p>Sebarang idea/cadangan genius tentang mengapa saya begitu bodoh? </p> <hr /> <p>Akhirnya saya memilih untuk menggunakan prosedur tersimpan untuk menjana jadual sementara untuk mengendalikan julat tarikh yang diperlukan atas beberapa sebab: </p> <ul> <li>Saya tahu julat tarikh yang perlu dicari setiap kali</li> <li>Malangnya, pelayan ini tidak boleh memasang modul perl pada masa ini, dan ia berada dalam keadaan teruk sehingga ia tidak mempunyai apa-apa seperti Date::-y dipasang</li> </ul> <p>Lelaran tarikh/masa dalam jawapan perl juga sangat baik, saya harap saya boleh memilih berbilang jawapan! </p>
P粉448346289P粉448346289423 hari yang lalu489

membalas semua(2)saya akan balas

  • P粉733166744

    P粉7331667442023-08-25 00:59:49

    Apabila saya perlu menangani masalah ini, untuk mengisi tarikh yang hilang, saya sebenarnya mencipta jadual rujukan yang mengandungi hanya semua tarikh yang saya minati dan menyertai jadual data pada medan tarikh. Ia kasar dan kasar, tetapi ia berkesan.

    SELECT DATE(r.date),count(d.date) 
    FROM dates AS r 
    LEFT JOIN table AS d ON d.date = r.date 
    GROUP BY DATE(r.date) 
    ORDER BY r.date ASC;

    Untuk output, saya akan menggunakan SELECT INTO OUTFILE dan bukannya menjana CSV secara manual. Dengan cara ini kita tidak perlu risau tentang melarikan diri daripada watak istimewa.

    balas
    0
  • P粉593649715

    P粉5936497152023-08-25 00:39:00

    Apabila anda memerlukan sesuatu yang serupa di bahagian pelayan, anda biasanya membuat jadual yang mengandungi semua tarikh yang mungkin antara dua titik dalam masa, dan kemudian meninggalkan sertai jadual ini dengan hasil pertanyaan. Serupa dengan:

    create procedure sp1(d1 date, d2 date)
      declare d datetime;
    
      create temporary table foo (d date not null);
    
      set d = d1
      while d <= d2 do
        insert into foo (d) values (d)
        set d = date_add(d, interval 1 day)
      end while
    
      select foo.d, count(date)
      from foo left join table on foo.d = table.date
      group by foo.d order by foo.d asc;
    
      drop temporary table foo;
    end procedure
    

    Dalam kes khusus ini, adalah lebih baik untuk melakukan semakan pada bahagian pelanggan dan menambah beberapa rentetan tambahan jika tarikh semasa bukan hari selepas hari sebelumnya.

    balas
    0
  • Batalbalas