Saya mencoba menjalankan kueri sederhana untuk membuat semua baris dibuat pada bulan November:
SELECT COUNT(*)
FROM dbo.profile
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000'
AND '2014-11-30 23:59:59.997';
Pengembalian SMS:
Konversi tipe data varchar ke tipe data datetime menghasilkan nilai di luar kisaran.
Saya tidak mengerti mengapa data sedang dikonversi dari varchar ke datetime ketika 'Dibuat' diatur ke datetime:
Apakah saya perlu memberi tahu server bahwa 'Dibuat' adalah datetime? Jika tidak, mengapa saya menerima pesan varchar ini?
Sunting: Nilai dalam database adalah YYYY-MM-DD
. Balas dari @SqlZim di bawah ini mengatakan bahwa saya perlu menggunakan convert () untuk memberi tahu sql format tanggal apa di db - dan untuk mengganti karakter spasi dengan huruf T:
select count(*)
from dbo.profile
where [created] between convert(datetime,'2014-11-01T00:00:00.000')
and convert(datetime,'2014-11-30T23:59:59.997');`
CONVERT(DATE, '20141201')
jika kebutuhan Anda untuk secara eksplisit mengalahkan semua yang lain. Kemudian lagi, jika kolom yang mendasarinya adalah tipe tanggal / waktu, ini tidak benar-benar diperlukan. Apakah Anda mengatakanWHERE Active = CONVERT(BIT, 1)
untuk menghindariWHERE Active = 1
ditafsirkan sebagaiINT
?