Tôi đang cố gắng chạy một truy vấn đơn giản để có được tất cả các hàng được tạo vào tháng 11:
SELECT COUNT(*)
FROM dbo.profile
WHERE [Created] BETWEEN '2014-11-01 00:00:00.000'
AND '2014-11-30 23:59:59.997';
SMSS trả về:
Việc chuyển đổi một kiểu dữ liệu varchar thành kiểu dữ liệu datetime dẫn đến một giá trị ngoài phạm vi.
Tôi không hiểu tại sao dữ liệu đang được chuyển đổi từ varchar sang datetime khi 'created' được đặt thành datetime:
Tôi có cần nói với máy chủ rằng 'Đã tạo' là datetime không? Nếu không, tại sao tôi nhận được thông báo varchar này?
Chỉnh sửa: Giá trị trong cơ sở dữ liệu là YYYY-MM-DD
. Trả lời từ @SqlZim bên dưới nói rằng tôi cần sử dụng convert () để cho sql biết định dạng ngày trong db - và để thay thế ký tự khoảng trắng bằng chữ 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')
nếu nhu cầu của bạn rõ ràng vượt qua tất cả những thứ khác. Sau đó, một lần nữa, nếu cột bên dưới là loại ngày / giờ, điều này thực sự không cần thiết. Bạn có nóiWHERE Active = CONVERT(BIT, 1)
để tránhWHERE Active = 1
bị hiểu là mộtINT
?