ms-access - 如何为 MS Access 编写区分大小写的查询?

标签 ms-access case-sensitive

我想知道 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/

相关文章:

sql - 奇怪的 MS Access 联盟问题 : Union is not actually union

algorithm - Access 中的 Acos & Asin 替代品

C++ if 语句故障

java - 从 Linux 获取 Java 应用程序的正确路径文件

jquery - 如何使用 jQuery 在选择时忽略大小写?

excel - 如何在 VBA 中将打开的 Excel 文件设置为工作簿对象

c# - 如何在 C# 中使用 datetimepicker 将日期(长格式)插入到 Access 数据库中? (错误仅在日期部分)

ms-access - 打开表单时默认为新记录 - Access

mysql - 在 WHERE 子句中使用函数 LOWER() UPDATE IGNORE 不执行任何操作

php - 区分大小写仅全部小写还是全部大写?