Bagaimanakah cara mengisi tarikh kosong dalam hasil SQL, sama ada pada sisi MySQL atau Perl, dan apakah cara yang paling mudah?
P粉448346289
2023-08-24 13:14:12
<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>
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.
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.
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:
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.