2012-04-06 21 views
6

Tôi muốn biết Truy vấn Chọn cho Truy cập MS có phân biệt chữ hoa chữ thường.Làm thế nào để viết truy vấn phân biệt chữ hoa chữ thường cho truy cập MS?

Tôi có hai giá trị cho VitualMonitorName như sau

VCode VirtualMonitorName 
Row 1 (1, 'VM1'); 
Row 2 (2, 'Vm1'); 

đây cả hai giá trị khác nhau.

Nếu tôi viết

"SELECT VCode FROM VirtualMaster WHERE VirtualMonitorName like '" + Vm1 + "'"; 

Nó trả lời VCODE = 1 Chỉ.

Trả lời

9

Bạn có thể sử dụng chức năng StrComp() với vbBinaryCompare để so sánh phân biệt chữ hoa chữ thường. Dưới đây là một ví dụ từ cửa sổ ngay lập tức để hiển thị cách hoạt động của StrComp(). Xem chủ đề trợ giúp Access để biết thêm chi tiết.

? StrComp("a", "A", vbBinaryCompare) 
1 

? StrComp("a", "A",vbTextCompare) 
0 

StrComp() trả về 0 nếu hai đối số đầu tiên đánh giá là bình đẳng, 1 hoặc -1 nếu họ không đồng đều, và Null nếu một trong hai đối số là Null.

Để sử dụng chức năng trong truy vấn, hãy cung cấp giá trị hằng số vbBinaryCompare (0) thay vì tên của nó.

SELECT VCode 
FROM VirtualMaster 
WHERE StrComp(VirtualMonitorName, "Vm1", 0) = 0; 

Phương pháp này cũng có sẵn cho các truy vấn từ các ứng dụng khác nếu họ sử dụng trình điều khiển cơ sở dữ liệu Access (ACE) mới hơn. Ví dụ, # mã C sau

string myConnectionString = 
     @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" + 
     @"Dbq=C:\Users\Public\Database1.accdb;"; 
using (OdbcConnection con = new OdbcConnection(myConnectionString)) 
{ 
    con.Open(); 
    using (var cmd = new OdbcCommand()) 
    { 
     cmd.Connection = con; 
     cmd.CommandText = 
       "SELECT COUNT(*) AS n FROM [VirtualMaster] " + 
       "WHERE StrComp([VirtualMonitorName],?,?) = 0"; 
     cmd.Parameters.AddWithValue("?", "Vm1"); 
     cmd.Parameters.Add("?", OdbcType.Int); 

     var vbCompareOptions = new Dictionary<string, int>() 
     { 
      {"vbBinaryCompare", 0}, 
      {"vbTextCompare", 1} 
     }; 
     string currentOption = ""; 

     currentOption = "vbBinaryCompare"; 
     cmd.Parameters[1].Value = vbCompareOptions[currentOption]; 
     Console.WriteLine(
       "{0} found {1} record(s)", 
       currentOption, 
       Convert.ToInt32(cmd.ExecuteScalar())); 

     currentOption = "vbTextCompare"; 
     cmd.Parameters[1].Value = vbCompareOptions[currentOption]; 
     Console.WriteLine(
       "{0} found {1} record(s)", 
       currentOption, 
       Convert.ToInt32(cmd.ExecuteScalar())); 
    } 
} 

sản xuất

vbBinaryCompare found 1 record(s) 
vbTextCompare found 2 record(s) 
2

Kiểm tra này ra:

https://support.microsoft.com/kb/244693?wa=wsignin1.0

Bài viết này mô tả bốn phương pháp để đạt được một case-sensitive join sử dụng Microsoft Jet cơ sở dữ liệu. Mỗi phương pháp trong số này có những ưu điểm và nhược điểm cần được cân nhắc trước khi lựa chọn thực hiện. Các phương pháp là:

  • StrComp
  • Case-Sensitive IISAM driver
  • Hexadecimal Expansion
  • Binary Dòng
0

Sử dụng ở mức độ đơn giản của mã hóa.

Như một điều kiện trong một hoạt động DCOUNT, hãy kiểm tra trên một trường (cột) phải có đúng trường hợp và bỏ qua các quốc gia/lãnh thổ trống.

 ' lngcounter will count the all States 
     ' or Territories Field (Column) with this 
     ' exact case value of 'Ohio'. ([ID] is an Autonumber ID field) 

     lngCounter = DCount("[id]", Trim(Me!tboDwellingTablename), "[State/territory],'Ohio',0) = 0") 
+0

chào nó có thể giúp đỡ nếu mã của bạn sử dụng các câu hỏi ví dụ mã. Nó có thể giúp người yêu cầu áp dụng giải pháp của bạn dễ dàng hơn. –

1

Chỉ sử dụng chức năng built-in, thêm một cột tùy chỉnh bổ sung trong chế độ thiết kế truy vấn:

location: InStr(1,[VCode],"VM1",0) 

tham số không yêu cầu so sánh nhị phân (phân biệt chữ hoa) khi việc tìm kiếm vị trí của "VM1" trong vòng [VCode]

thiết lập các tiêu chí trong cột đó để >0 hồ sơ vì vậy chỉ với non-zero vị trí trong VCODE phù hợp với Like "*vm*" chứa chuỗi VM1 chính xác -

Mệnh WHERE trông giống như:

WHERE (((VirtualMaster.VCode) Like "\*vm*") AND ((InStr(1,[VCode],"VM1",0))>0)); 
Các vấn đề liên quan