So sánh chuỗi có dấu trong sql
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng toán tử LIKE trong SQL Server để kiểm tra xem chuỗi ký tự có khớp với mẫu đã chỉ định hay không. Show
Tổng quan về toán tử LIKE trong SQL ServerToán tử LIKE trong SQL Server là một toán tử logic xác định xem một chuỗi ký tự có khớp với mẫu đã chỉ định hay không. Một mẫu có thể bao gồm các ký tự thông thường và ký tự đại diện. Toán tử LIKE được sử dụng trong các mệnh đề WHERE của các câu lệnh SELECT, UPDATE và DELETE để lọc các bảng ghi dựa trên biểu thức khởp mẫu. Dưới đây minh họa cú pháp của toán tử LIKE trong SQL Server: column | expression LIKE pattern [ESCAPE escape_character]PatternMẫu (pattern) là một chuỗi các ký tự để tìm kiếm trong cột hoặc biểu thức. Nó có thể bao gồm các ký tự đại diện hợp lệ sau:
Các ký tự đại diện làm cho toán tử LIKE linh hoạt hơn các toán tử so sánh chuỗi bằng (=) và không bằng (!=). ESCAPEKý tự thoát hướng dẫn toán tử LIKE xem các ký tự đại diện là các ký tự thông thường. Ký tự thoát không có giá trị mặc định và phải được ước lượng chỉ một ký tự. Toán tử LIKE trả về TRUE nếu cột hoặc biểu thức khớp với mẫu được chỉ định. Để phủ nhận kết quả của toán tử LIKE, bạn sử dụng toán tử NOT LIKE như sau: column | expression NOT LIKE pattern [ESCAPE escape_character]Ví dụ về toán tử LIKE trong SQL ServerChúng tôi sẽ dụng bảng customers trong cơ sở dữ liệu mẫu để làm ví dụ cho toán tử LIKE trong SQL Server. Sử dụng toán tử LIKE với ký tự đại diện % trong SQL ServerVí dụ sau đây tìm kiếm các khách hàng có họ bắt đầu bằng chữ cái Z: SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE 'Z%' ORDER BY first_name;Đây là kết quả: Ví dụ sau đây trả về các khách hàng có họ kết thúc bằng chuỗi er: SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE '%er' ORDER BY first_name;Đây là kết quả: Câu lệnh sau lấy ra các khách hàng có họ bắt đầu bằng chữ cái T và kết thúc bằng chữ cái s: SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE 'T%s' ORDER BY first_name;Đây là kết quả: Sử dụng toán tử LIKE với ký tự đại diện _ trong SQL ServerDấu gạch dưới (_) đại diện cho một ký tự duy nhất. Câu lệnh sau trả về khách hàng có họ chứa ký tự thứ hai là chữ cái u: SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE '_u%' ORDER BY first_name;Đây là kết quả: Giải thích mẫu _u% trong ví dụ trên:
Sử dụng toán tử LIKE với ký tự đại diện [danh sách các ký tự đại diện] trong SQL ServerDấu ngoặc vuông ([]) với một danh sách các ký tự, ví dụ, [ABC] đại diện cho một ký tự phải là một trong các ký tự được chỉ định trong danh sách. Ví dụ, truy vấn sau trả về những khách hàng có họ bắt đầu bằng ký tự Y hoặc Z: SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE '[YZ]%' ORDER BY last_name;Đây là kết quả: Sử dụng toán tử LIKE với ký tự đại diện [phạm vi] trong SQL ServerDấu ngoặc vuông với phạm vi ký tự, ví dụ: [A-C] đại diện cho một ký tự phải nằm trong phạm vi được chỉ định. Ví dụ: truy vấn sau đây tìm kiếm các khách hàng có họ bắt đầu là các chữ cái nằm trong phạm vi từ chữ cái A đến chữ cái C: SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE '[A-C]%' ORDER BY first_name;Đây là kết quả: Sử dụng toán tử LIKE với ký tự đại diện [^phạm vi] trong SQL ServerDấu ngoặc vuông với dấu mũ (^) theo sau là một phạm vi, ví dụ: [^A-C] hoặc danh sách ký tự, ví dụ: [ABC] đại diện cho một ký tự không có trong danh sách phạm vi hoặc danh sách ký tự được chỉ định. Ví dụ: truy vấn sau đây trả về các khách hàng có họ không bắt đầu bằng các chữ cái trong phạm vi từ chữ cái A đến chữ cái X: SELECT customer_id, first_name, last_name FROM sales.customers WHERE last_name LIKE '[^A-X]%' ORDER BY last_name;Đây là kết quả: Sử dụng toán tử NOT LIKE trong SQL ServerVí dụ sau sử dụng toán tử NOT LIKE để tìm kiếm các khách hàng có tên không được bắt đầu bằng là chữ cái A: SELECT customer_id, first_name, last_name FROM sales.customers WHERE first_name NOT LIKE 'A%' ORDER BY first_name;Đây là kết quả: Sử dụng toán tử LIKE với ESCAPE trong SQL ServerĐầu tiên, chúng ta sẽ tạo một bảng mới cho ví dụ này: CREATE TABLE sales.feedbacks ( feedback_id INT IDENTITY(1, 1) PRIMARY KEY, comment VARCHAR(255) NOT NULL );Thứ hai, chèn một số bản ghi vào bảng sales.feedbacks: INSERT INTO sales.feedbacks(comment) VALUES('Can you give me 30% discount?'), ('May I get me 30USD off?'), ('Is this having 20% discount today?');Thứ ba, truy vấn kiểm tra dữ liệu trong bảng sales.feedbacks: SELECT * FROM sales.feedbacks;Đây là kết quả: Nếu bạn muốn tìm kiếm những phản hồi có chuỗi 30% trong cột comment, bạn có thể viết một truy vấn như thế này: SELECT feedback_id, comment FROM sales.feedbacks WHERE comment LIKE '%30%';Đây là kết quả: Truy vấn trả về các phản hồi có cột comment chứa chuỗi 30% và 30USD, đây không phải là điều chúng tôi mong đợi. Để giải quyết vấn đề này, bạn cần sử dụng mệnh đề ESCAPE: SELECT feedback_id, comment FROM sales.feedbacks WHERE comment LIKE '%30!%%' ESCAPE '!';Đây là kết quả: Trong truy vấn này mệnh đề ESCAPE chỉ định rằng ký tự ! là ký tự thoát. Nó hướng dẫn toán tử LIKE coi ký tự % là một chuỗi ký tự thông thường thay vì ký tự đại diện. Lưu ý: nếu không có mệnh đề ESCAPE, truy vấn sẽ trả về một tập kết quả trống. Trong hướng dẫn này, bạn đã học cách sử dụng toán tử LIKE trong SQL Server để kiểm tra xem một chuỗi ký tự có khớp với mẫu đã chỉ định hay không.
Đoạn code của em như sau. Vấn đề em gặp phải là khi so sánh dữ liệu database SQL dùng equals. So sánh Username với "Nguyen A" ở row 1 không được (So sánh Username "Tran B" ở row 2 thì lại OK), loay hoay 1 hồi sửa vài thứ như đổi 2 vị trí dòng Nguyen A và Tran B trong database, thì lại được, sau đó em so sánh Password của Nguyen A, thì lại ko được. So sánh Password của dòng "Tran B" row 2 thì vẫn được nha. Thực sự em không hiểu lý do, anh chị nào biết giúp em nha, em đang cần. Thanks all
if(connection != null){
System.out.println("ket noi thanh cong");
Statement state = connection.createStatement();
ResultSet rs1 = state.executeQuery("select Username, Password from KhachHang");
while(rs1.next())
{
String k = rs1.getString("Username");
System.out.println(k);
if(("Nguyen A").equals(k)){
if(rs1.getString("Password").equals("123456")){
System.out.println("nhap dung user A");
}
}
if(("Tran B").equals(k)){
if(rs1.getString("Password").equals("654321")){
System.out.println("nhap dung user B");
}
}
}
}
Bạn đang dùng gói jdk nào vậy, một người bạn của mình cũng bị như vậy mà mình cũng phải bó tay đó. Dự đoán là equals() có vấn đề
Dùng các phương thức của chuỗi: String.trim(), String.toLowwerCase(), String.toUpperCase() để bỏ khoảng trắng dư và đưa về cùng một kiểu chữ (thường/HOA) xem có được không.
In kiểm tra nội dung đã System.out.println("'" + rs1.getString("Password") + "'"):
Rất cám ơn các bạn
Đúng là có cái khoảng trắng phía sau
Mình tạo cột với dữ liệu là nchar(10) thì lúc nào có cũng có khoảng trắng để cho đủ 10 ký tự.
Mình chưa thử các hàm String.trim(), String.toLowwerCase(), String.toUpperCase() như bạn phía trên nói, nhưng nếu dùng như dzậy thì có vẻ phức tạp hơn, có cách nào xử lý vấn đề nào trong SQL Server không các bạn?
Phức tạp trong cách nhìn vấn đề nhưng đơn giản trong cách code rs1.getString("Password").trim()
Hoặc là dùng kiểu dữ liệu khác không tự động thêm khoảng trắng. Reactions: chienthan_ct
Ớ ờ, mật khẩu mà dùng kểu char. Làm khó người dùng mất rồi Reactions: chienthan_ct
hì, tại mình mới học java và SQL nên không rành lắm, mong các bạn giúp đỡ
Dzậy mình nên dùng kiểu gì?
Mà mình thấy các cột khác cũng vậy, tự động thêm các khoảng trắng
Trích dẫn từ chienthan_ct: hì, tại mình mới học java và SQL nên không rành lắm, mong các bạn giúp đỡ
Dzậy mình nên dùng kiểu gì?
Mà mình thấy các cột khác cũng vậy, tự động thêm các khoảng trắng Nhưng cũng tùy theo quá trình xử lý nữa. Nếu quá trình xửa lý mà có dùng đến mã hóa (MD5 chẳng hạn) thì dùng varchar (hoặc có thể là char) là đủ rồi.
Cám ơn bạn, mình mới search google và đã tìm ra |