我想知道 MS Access 的选择查询(区分大小写)。
我有两个 VitualMonitorName 值,如下所示
VCode VirtualMonitorName
Row 1 (1, 'VM1');
Row 2 (2, 'Vm1');
这里两个值是不同的。
如果我写
"SELECT VCode FROM VirtualMaster WHERE VirtualMonitorName like '" + Vm1 + "'";
它仅回复 VCode = 1。
最佳答案
您可以将 StrComp()
函数与 vbBinaryCompare
结合使用来进行区分大小写的比较。以下是立即窗口中的示例,展示了 StrComp()
的工作原理。有关详细信息,请参阅 Access 帮助主题。
? StrComp("a", "A", vbBinaryCompare)
1
? StrComp("a", "A",vbTextCompare)
0
StrComp()
如果前两个参数计算结果相等,则返回 0;如果前两个参数计算结果不相等,则返回 1 或 -1;如果任一参数为 Null,则返回 Null。
要在查询中使用该函数,请提供 vbBinaryCompare
常量的值 (0) 而不是其名称。
SELECT VCode
FROM VirtualMaster
WHERE StrComp(VirtualMonitorName, "Vm1", 0) = 0;
如果其他应用程序使用较新的 Access 数据库引擎(“ACE”)驱动程序,则此方法也可用于来自其他应用程序的查询。例如下面的C#代码
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()));
}
}
产生
vbBinaryCompare found 1 record(s)
vbTextCompare found 2 record(s)
关于ms-access - 如何为 MS Access 编写区分大小写的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10046627/