Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 18 kết quả

Đề tài: Câu lệnh tìm kiếm nâng cao trong sql server 2000 với c#

  1. #1
    Ngày gia nhập
    08 2008
    Bài viết
    13

    Mặc định Câu lệnh tìm kiếm nâng cao trong sql server 2000 với c#

    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!

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    294

    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...

  3. #3
    Ngày gia nhập
    09 2007
    Bài viết
    724

    bạn thử câu select này xem sao.

    select * from aaa where NgayBan < '12/12/2008' and NgayBan > '12/02/2007'.

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    294

    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...

  5. #5
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Trích dẫn Nguyên bản được gửi bởi darkan Xem bài viết
    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' ^^!
    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.

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    6

    Mặc định Câu lệnh tìm kiếm nâng cao trong sql server 2000 với c#

    Trích dẫn Nguyên bản được gửi bởi darkan Xem bài viết
    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' ^^!
    Bạn này phát biểu liều thật. Chắc chưa bao giờ thử truy vấn kiểu này. Bạn cứ thử xem có đúng không? Mình đảm bảo là SQL vẫn truy vấn đúng đấy bạn ạ.

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    294

    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...

  8. #8
    Ngày gia nhập
    06 2007
    Bài viết
    206

    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.

  9. #9
    Ngày gia nhập
    08 2008
    Bài viết
    13

    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ử!

  10. #10
    Ngày gia nhập
    08 2008
    Bài viết
    13

    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 ...

Các đề tài tương tự

  1. MS SQL Lỗi Tạo thủ tục lưu trữ trong SQL server 2000 ?
    Gửi bởi SIDA trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 0
    Bài viết cuối: 17-10-2011, 04:39 PM
  2. làm sao chỉnh id tự động tăng trong sql server 2000
    Gửi bởi thuan trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 15-08-2011, 07:35 AM
  3. làm sao để tạo file backup trong sql server 2000
    Gửi bởi thuan trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 2
    Bài viết cuối: 18-12-2010, 11:04 AM
  4. Hỏi về indentity trong SQL server 2000
    Gửi bởi bathong trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 5
    Bài viết cuối: 02-04-2010, 09:22 PM
  5. [Solved]tìm kiếm trong SQL server 2000
    Gửi bởi hackerhocyeu trong diễn đàn Thắc mắc đại cương Database & Reporting
    Trả lời: 1
    Bài viết cuối: 19-04-2008, 10:09 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn