Thế bạn đã làm được những gì với Sql rồi?
Bạn post những gì đã làm được lên đây để mọi người tư vấn cho bạn cách làm phù hợp. Không thì e rằng bạn không hiểu được đáp án ^^!
Cheers!
Mình mới học ngôn ngữ lập trình c# và sql server nên khi bắt đầu vào mục tìm kiếm sản phẩm mình gặp 1 vấn đề (Như tiêu để mình đã đề cập) .Mình xin đưa ra ví dụ cụ thể như sau :
--- Mình thiết kế 1 form tìm kiếm có chức năng(Tìm kiếm những sản phẩm nào đã bán từ ngày này -> đến ngày này và từ giờ này đến giờ này)
---- Eg:Từ ngày 11/1/2008 đến 12/1/2008 và từ 6:00 AM đến 10 AM
Hix mình nghĩ mãi mà không ra được,Xin nhờ các bạn chỉ giúp mình với!
--- Hiện tại mình đang sử dụng csdl là sql server 2000 nên mình nhờ các bạn chỉ giúp mình câu lệnh select bằng sql server 2000 nhé!Rất cảm ơn các bạn đã đọc những dòng này!
Thế bạn đã làm được những gì với Sql rồi?
Bạn post những gì đã làm được lên đây để mọi người tư vấn cho bạn cách làm phù hợp. Không thì e rằng bạn không hiểu được đáp án ^^!
Cheers!
Is the moon rising...
bạn thử câu select này xem sao.
select * from aaa where NgayBan < '12/12/2008' and NgayBan > '12/02/2007'.
Câu lệnh của zkday sai hoàn toàn ^^!
Với cách viết thế kia sql sẽ hiểu là so sánh String. Mà nếu là so sánh String thì '14/11/2008' > '12/12/2008' ^^!
Is the moon rising...
acac code của mình chạy đúng mà..
mình đã test rồi. nếu bạn để NgayBan là kiểu datetime thì là đúng mà. nó vẫn hiểu là ngày tháng thôi.
đây là đoạn bộ mình test. bạn thử xem sao.
Code:create table aaa( NgayBan datetime, SoLuong int, TenHang nvarchar(23) ) insert into aaa values('12/3/2008','10','banh mi') insert into aaa values('12/23/2008','10','muoi') insert into aaa values('12/25/2001','10','cam') insert into aaa values('12/3/2002','10','chuoi') insert into aaa values('12/3/2007','10','Vit') insert into aaa values('12/3/2006','10','ga') insert into aaa values('1/13/2008','10','tom') insert into aaa values('1/23/2008','10','ca') insert into aaa values('2/13/2008','10','thit') insert into aaa values('1/13/2008','10','banh mi') insert into aaa values('8/3/2008','10','banh mi') insert into aaa values('12/1/2008','10','banh mi') insert into aaa values('12/3/2008','10','banh mi') insert into aaa values('12/23/2008','2','muoi') insert into aaa values('12/25/2001','123','cam') insert into aaa values('12/13/2002','120','chuoi') insert into aaa values('12/23/2007','120','Vit') insert into aaa values('12/13/2006','120','ga') insert into aaa values('1/13/2008','110','tom') insert into aaa values('1/23/2008','160','ca') insert into aaa values('2/25/2008','102','thit') insert into aaa values('1/30/2008','1021','banh mi') insert into aaa values('8/3/2008','101','banh mi') insert into aaa values('12/31/2008','102','banh mi') select * from aaa where NgayBan > '1/1/2006' and NgayBan < '1/14/2008'
Đã được chỉnh sửa lần cuối bởi zkday2686 : 02-09-2008 lúc 01:55 AM.
Oh ^^!
Dark không có truy vấn kiểu này bao giờ ^^!
sry zkday trước là ko để ý nên đã kêu hoàn toàn sai ^^!
1 - Nếu bạn dùng trường dữ liêu kiểu datetime thì SQL sẽ tự động convert từ string sang kiểu đó nên sẽ ko có so sánh string ^^!
2 - Tại sao Dark lại phát biểu "liều" như thế khi mà chưa có truy vấn kiểu này bao giờ.
Chế độ tự động convert nó phụ thuộc vào culture.
Bây giờ Dark có 1 cái string "11/10/2008" thì bạn khẳng định nó sẽ là ngày nào? 11 tháng 10 năm 2008 hay 10 tháng 11 năm 2008?
SQL sẽ sử culture để xác định. Vậy bạn có đảm bảo tất cả các máy bạn sẽ cài ứng dụng/db sẽ có cùng 1 culture?
Đó là khi bạn truy vấn. Khi bạn update dữ liệu cũng vậy. Bạn có khẳng định được cái string bạn truyền xuống DB sẽ được lưu thế nào ko?
Dark muốn tránh hoàn toàn các trường hợp có thể xảy ra sai sót ngoài ý muốn như vậy nên không bao giờ truy vấn/update với dữ liệu kiểu string cho trường dạng DateTime cả ^^!
Trong các trường hợp này nên dùng hàm convert của DB. Dark ko nhớ trong SQL server thì hàm này là hàm nào. Nhưng chắc chắn có ^^!(Dark dạo này chỉ làm với Oracle nên ko rõ lắm sqlserver,các bạn thông cảm. Trong Oracle thì nó là hàm to_date(datestring,dateformatstring)).
Cheers ^^!
Is the moon rising...
Mình nghĩ để dễ dàng trong CSDL hàng bán bạn tạo 2 trường:
1 trường lưu ngày bán: ngayBan(datetime)
1 trường lưu giờ bán: gioBan(tinyint)
để tìm kiếm đúng như ý bạn câu lệnh như sau:
select.....
where ngayBan between từNgày and đếnNgày and gioBan between từGiờ and đếnGiờ
thử xem!
Thà để chửi dốt 1 lần, còn hơn ngu cả đời.
cảm ơn các bạn đã giúp mình!Mình nghĩ cách của nth4 là hay nhất và đúng với ý mình đang cần.Nhưng dù sao cũng cảm ơn tất cả các bạn đã trả lời cho mình...Mình sẽ thử!
hixhix... gặp lỗi roài ...
SELECT tensp
FROM Table1
WHERE (ngayban BETWEEN '11/10/2008' AND '13/10/2008') AND (gioban BETWEEN '11:00:01 AM' AND '12:00:01 AM')
đây là lỗi khi thực hiện câu lệnh trên :
[microsoft][ODBC SQL Server Driver][SQL Server] The Conversion of a char data type to a Datetime data type resulted an out-of-range datetime value.
moi người giúp mình zoi....
Mình thiết kế 1 bảng có 3 trường thế này thôi :
-Trường tên sản phẩm để kiểu nvarchar(50) NOT NULL,
-Trường ngày nhập để kiểu Datetime(8) NOT NULL,
-Trường giờ nhập để kiểu Datetime(8) NOT NULL
khi INSERT DL vào nó sẽ như thế này :
Tensanpham Ngaynhap Gionhap
Lap trinh c++ 11/10/2008 12:00:01 AM
Các bạn giúp mình tìm kiếm như sau : Tìm sản phẩm nào đã nhập từ ngày 9/10/2008 đến ngày 11/10/2008 và giờ từ 6:00:01 AM đến 12:00:01 AM
Chân thành cảm ơn các bạn ...