Bandingkan tanggal string datetime di SQL Server?
Di SQL Server saya memiliki DATETIME
kolom yang mencakup elemen waktu.
Contoh:
'14 AUG 2008 14:23:019'
Apa terbaik metode untuk hanya pilih catatan untuk hari tertentu, mengabaikan waktu paruh?
Contoh: (Tidak aman, karena tidak sesuai dengan waktu paruh dan kembali tidak ada baris)
DECLARE @p_date DATETIME
SET @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )
SELECT *
FROM table1
WHERE column_datetime = @p_date
Catatan: Mengingat situs ini juga mencatat catatan dan teknik yang anda mengambil dan kemudian lupa, aku'm akan posting saya sendiri jawaban untuk pertanyaan ini sebagai DATETIME hal-hal di MSSQL mungkin adalah topik yang saya lookup paling di SQLBOL.
Update Menjelaskan contoh untuk lebih spesifik.
Edit Maaf, Tapi aku've telah ke bawah-mod jawaban yang SALAH (jawaban bahwa hasil yang salah).
@Jorrit: MANA (tanggal>'20080813' DAN tanggal<'20080815')
akan kembali ke-13 dan ke-14.
@wearejimbo: Dekat, tapi tidak ada cerutu! lencana penghargaan yang diberikan kepada anda. Anda tidak terjawab catatan-catatan tertulis di 14/08/2008 23:59:001-23:59:999 (yaitu Kurang dari 1 detik sebelum tengah malam.)
Teknik 1:
Keuntungan dari ini adalah bahwa hal itu akan menggunakan indeks pada 'column_datetime' jika ada.
Di SQL Server 2008, anda bisa menggunakan datatype DATE
@Orang. Saya pikir anda akan menemukan bahwa ini solusi timbangan baik-baik saja. Silahkan lihat di rencana eksekusi query asli query.
Dan untuk tambang:
Coba bandingkan dengan tahun, bulan dan hari nilai-nilai.
Sesuatu seperti ini?
Teknik 2:
Jika column_datetime lapangan tidak diindeks, dan adalah tidak mungkin (atau indeks ini tidak mungkin untuk digunakan) kemudian menggunakan DATEDIFF() yang lebih pendek.
Saya biasanya mengkonversi tanggal-waktu untuk upload dan membandingkan mereka, seperti ini:
atau
Titik yang baik tentang indeks dalam jawaban anda diterima.
Namun, jika anda benar-benar mencari hanya pada spesifik
TANGGAL
ataurentang TANGGAL
sering, maka solusi terbaik yang saya temukan adalah untuk menambah bertahan dihitung kolom tabel yang hanya akan berisiTANGGAL
, dan menambahkan indeks pada kolom ini:Menambahkan indeks pada kolom tersebut:
Maka pencarian anda akan lebih cepat:
Cara untuk mendapatkan bagian TANGGAL DATETIME lapangan di MS SQL Server:
Salah satu cara tercepat dan rapi cara untuk melakukan ini adalah dengan menggunakan
Menghindari CPU penghilang "mengubah tanggal menjadi string tanpa waktu dan kemudian mengubahnya kembali lagi" logika.
Hal ini juga tidak mengekspos implementasi internal bahwa "porsi waktu dinyatakan sebagai fraksi" tanggal.
Dapatkan tanggal hari pertama dari bulan
Dapatkan tanggal rfom 1 tahun yang lalu
Fungsi ini Cor(Lantai(Cast(GetDate() Sebagai Float)) Sebagai DateTime) kembali datetime datatype dengan porsi waktu dihapus dan dapat digunakan sebagai begitu.
atau
Aku tahu ini isn't persis bagaimana anda ingin melakukan ini, tapi ini bisa menjadi awal:
Ini akan mengkonversi datatime dan string ke varchars format "YYYY-MM-DD".
Ini adalah sangat jelek, tapi harus kerja
Upload dapat dibandingkan di sqlserver menggunakan string sebagai perbandingan: misalnya
Ada banyak format tanggal di SQL yang sedang ditentukan. Lihat https://msdn.microsoft.com/en-in/library/ms187928.aspx
Mengkonversi dan membandingkan varchar kolom dengan tanggal-tanggal tertentu.
Sintaks:
Cara terbaik adalah untuk hanya mengambil bagian tanggal menggunakan SQL DATE() Fungsi:
Di sqlserver
Dalam C# Lulus string pendek dari nilai tanggal dengan menggunakan ToShortDateString() fungsi. contoh: DateVariable.ToShortDateString();