SQL Server: Mengeluarkan Masa dengan Cekap daripada Data DateTime
Menggunakan medan datetime
dalam SQL Server selalunya memerlukan pengasingan komponen tarikh, membuang masa. Artikel ini membandingkan dua teknik biasa: DATEADD
/DATEDIFF
dan menghantar ke char
, menganalisis ciri prestasinya.
Perbandingan Kaedah
Pendekatan DATEADD
/DATEDIFF
:
<code class="language-sql">a) SELECT DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0)</code>
Ini dengan bijak menggunakan DATEDIFF
untuk mengira perbezaan hari dari zaman (1900-01-01) dan kemudian DATEADD
untuk membina semula tarikh tanpa komponen masa.
Sebagai alternatif, hantar ke char
:
<code class="language-sql">b) SELECT CAST(CONVERT(CHAR(11), GETDATE(), 113) AS DATETIME)</code>
Ini menukarkan datetime
kepada rentetan aksara (menunjukkan tarikh sahaja) dan kemudian kembali ke datetime
.
Analisis Prestasi
Ujian mendedahkan bahawa kaedah (a) – DATEADD
/DATEDIFF
– biasanya menggunakan lebih sedikit sumber CPU, terutamanya dengan set data yang besar. Walau bagaimanapun, ia terdedah kepada isu yang berpotensi berkaitan dengan ketidakkonsistenan pemformatan bahasa dan tarikh.
Kaedah (b) – pemutus – mungkin memindahkan lebih sedikit data disebabkan oleh penukaran char
pertengahan, tetapi overhed ini lazimnya kurang memberi kesan daripada potensi keuntungan prestasi (a).
Pertimbangan Lanjut
Sejak SQL Server 2008, kaedah yang lebih langsung tersedia: menghantar terus ke DATE
jenis data.
Pengesyoran
Kedua-dua kaedah mencapai hasil yang diingini, tetapi pilihan optimum bergantung pada konteks aplikasi anda. Untuk prestasi unggul, terutamanya dengan set data yang besar, DATEADD
/DATEDIFF
(kaedah a) biasanya diutamakan. Jika mengindeks lajur datetime
adalah kritikal, pertimbangkan untuk menghantar ke DATE
atau pastikan komponen masa tidak menjejaskan penggunaan indeks.
Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Masa dengan Cekap dari Medan DateTime dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!