Giải thích cú pháp Where trong SQL?

Liên hệ QC

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,884
Được thích
7,687
Giới tính
Nam
Nghề nghiệp
Kế Toán
Mình viết câu lệnh SQL:
1/ ...where matk like "111*"...
2/...where left(matk,3)="111"
3/st= "1111"
....where left(matk,len(st))=st

Rất nhiều trường hợp TK 1111,1111AC... không nhận diện được.Mình đã thử như dưới đây vẫn không được:

...where IIf(IsNumeric(matk),str(matk),matk)="1111"...

Nếu là ký tự thì OK ngay, nhưng ký tự số thì khác, thật khó cho dân Kế toán bọn mình.
Nhờ anh em hướng dẫn giùm. Xin cảm ơn.
 
Chỉnh sửa lần cuối bởi điều hành viên:
To: sealand,
Cho tôi hỏi bạn viết SQL trong trường hợp nào?
Ví dụ: dùng cho ADO kết nối Access hay cho Excel...?
Nếu bạn viết cho Excel thì bạn phải chắc chắn rằng định dạng cột dữ liệu của bạn phải đúng. Vì thật sự ra nếu dùng ADO kết nối Excel thì tôi khuyên bạn không nên tập trung quá nhiều thời gian cho nó. Trước đây tôi cũng có thời gian "nằm mùng" với nó, nhưng cuối cùng chán...và đã chuyển qua ADO + Access.
Nếu bạn dùng SQL cho Access thì tôi xin giới thiệu bạn quyển sách tôi tìm được trên mạng tại đây.

Lê Văn Duyệt

Mình viết câu lệnh SQL:
1/ ...where matk like "111*"...
2/...where left(matk,3)="111"
3/st= "1111"
....where left(matk,len(st))=st

Rất nhiều trường hợp TK 1111,1111AC... không nhận diện được.Mình đã thử như dưới đây vẫn không được:

...where IIf(IsNumeric(matk),str(matk),matk)="1111"...

Nếu là ký tự thì OK ngay, nhưng ký tự số thì khác, thật khó cho dân Kế toán bọn mình.
Nhờ anh em hướng dẫn giùm. Xin cảm ơn.
 
Lần chỉnh sửa cuối:
Mình kết nối với Exc mới có hiện tượng này. Nếu matk gõ '1111cv thì chắc được, nhưng Format ô là Text hay dung hàm Text để chuyển thì không ổn. Dữ liệu trích rút từ phần mềm khác ra nên không chủ động được, mong anh hướng dẫn giúp.
 
Mình kết nối với Exc mới có hiện tượng này. Nếu matk gõ '1111cv thì chắc được, nhưng Format ô là Text hay dung hàm Text để chuyển thì không ổn. Dữ liệu trích rút từ phần mềm khác ra nên không chủ động được, mong anh hướng dẫn giúp.
Anh có thể up ví dụ minh họa trong trường hợp này được không.
 
Mình kết nối với Exc mới có hiện tượng này. Nếu matk gõ '1111cv thì chắc được, nhưng Format ô là Text hay dung hàm Text để chuyển thì không ổn. Dữ liệu trích rút từ phần mềm khác ra nên không chủ động được, mong anh hướng dẫn giúp.
Theo tôi, bạn sẽ đưa dữ liệu vào một database Access rồi sau đó bạn dùng ADO kết nối với file này và trích rút dữ liệu. Vậy trường lưu tài khoản sẽ là kiểu Text. Vậy bạn tha hồ dùng câu lệnh SQL giống như #1 bạn đã đề cập.

Lê Văn Duyệt
 
Bạn xem trên code hiện thời là không được (Và nhiều trường hợp khác nữa). Nhưng nếu thay bằng đoạn lệnh mình Rem. trong code thì lại được.
To Le Van Duyet: Bạn nghiên cứu giúp. Ngay từ khi tham gia GPE mình luôn để ý học hỏi tìm cách sử lý hạn chế của file Exl là dùng công thức để kết nối rút dữ liệu báo cáo khi dữ liệu lớn nó ỳ ra không chạy nổi. Có một số cách khác để rút nhưng mình cho dùng ADODC mạnh hơn vì nó kết hợp tốt với ngôn ngữ SQL . Nếu sử lý tốt thì rất khả quan . Ví dụ bảng cân đối PS tài khoản mình phải dùng đặc 1 sheet công thức sumproduct() nhưng ở đây mỗi câu lệnh SQL ...sum...Groupby...là xong.

Rất cám ơn anh em quan tâm.
 

File đính kèm

  • so cai tai khoan.rar
    37.5 KB · Đọc: 45
Lần chỉnh sửa cuối:
Dear sealand,
-------------

Như anh Duyệt đã nói, anh phải đảm bảo chắc chắn các Field trong bảng CSDL Excel phải cùng kiểu dữ liệu. Cụ thể Field "TK" chỉ có thể là kiểu chuỗi (text, string). Nếu bằng mắt thường sẽ không thể kiểm tra hết được, anh nên sử dụng hàm TEXT(TK,"@") để chuyển đổi. Nếu không có động tác kiểm tra này rất có thể điều kiện lọc trong truy vấn sẽ không còn chính xác nữa vì ADOBD.Recodeset đã loại bỏ những giá trị không hợp lệ rồi.

Quan trọng hơn, trong câu truy vấn SQL anh không nên sử dụng ký tự * để làm truy vấn đại diện mà nên thay bằng ký tự %. Ký tự này được sử dụng làm ký tự đại diện trong hầu hếtcác hệ cơ sở dữ liệu không phải là MS SQL Server (theo em biết).

Chúc anh thành công!
 
Bạn xem trên code hiện thời là không được (Và nhiều trường hợp khác nữa). Nhưng nếu thay bằng đoạn lệnh mình Rem. trong code thì lại được.
To Le Van Duyet: Bạn nghiên cứu giúp. Ngay từ khi tham gia GPE mình luôn để ý học hỏi tìm cách sử lý hạn chế của file Exl là dùng công thức để kết nối rút dữ liệu báo cáo khi dữ liệu lớn nó ỳ ra không chạy nổi. Có một số cách khác để rút nhưng mình cho dùng ADODC mạnh hơn vì nó kết hợp tốt với ngôn ngữ SQL . Nếu sử lý tốt thì rất khả quan . Ví dụ bảng cân đối PS tài khoản mình phải dùng đặc 1 sheet công thức sumproduct() nhưng ở đây mỗi câu lệnh SQL ...sum...Groupby...là xong.

Rất cám ơn anh em quan tâm.
Anh xem file thử nhé
 

File đính kèm

  • so cai tai khoan.zip
    54.4 KB · Đọc: 54
Quan trọng hơn, trong câu truy vấn SQL anh không nên sử dụng ký tự * để làm truy vấn đại diện mà nên thay bằng ký tự %. Ký tự này được sử dụng làm ký tự đại diện trong hầu hết các hệ cơ sở dữ liệu không phải là MS SQL Server (theo em biết).

* là trong Access
% là trong MS SQL (và có thể vài HQT CSDL khác)

Tùy môi trường mà...tra google (đầy trên mạng)
 
Cám ơn các bạn đã có những giải đáp chuẩn xác giúp mình.
Nhưng nhân đây mình muốn hỏi thêm chút nữa:
Ký tự % (Access là *) thay cho một loạt các ký tự sau nó , vậy ký tự nào thay cho 1 ký tự giống như ? trong Access.
 
Cám ơn các bạn đã có những giải đáp chuẩn xác giúp mình.
Nhưng nhân đây mình muốn hỏi thêm chút nữa:
Ký tự % (Access là *) thay cho một loạt các ký tự sau nó , vậy ký tự nào thay cho 1 ký tự giống như ? trong Access.
Anh thử dùng @ thay cho ? xem
 
Web KT

Group

DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2
Back
Top Bottom