8

我想知道区分大小写的 MS Access 选择查询。

我有两个 VitualMonitorName 值,如下所示

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

这里两个值是不同的。

如果我写

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

它只回复 VCode = 1。

4

5 回答 5

14

您可以使用StrComp()with 函数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)
于 2012-04-06T18:06:29.627 回答
2

看一下这个:

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

本文介绍了四种使用 Microsoft Jet 数据库引擎实现区分大小写的 JOIN 的方法。这些方法中的每一种都有优点和缺点,在选择实现之前应该权衡一下。方法是:

  • StrComp
  • 区分大小写的 IISAM 驱动程序
  • 十六进制扩展
  • 二进制字段
于 2014-12-14T07:30:06.017 回答
1

仅使用内置函数,在查询设计视图中添加一个额外的自定义列:

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

在找到“VM1”的位置时,零参数请求二进制比较(区分大小写)[VCode]

将该列中的条件设置为,>0以便仅在 vcode 匹配中具有非零位置的记录Like "*vm*"包含确切的 VM1 字符串 -

WHERE子句如下所示:

WHERE (((VirtualMaster.VCode) Like "\*vm*") AND ((InStr(1,[VCode],"VM1",0))>0));
于 2017-12-01T16:39:46.810 回答
0

在更简单的编码级别上使用。

作为 DCOUNT 操作中的条件,检查必须具有正确大小写的字段(列),并忽略空白状态/区域。

      '  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")
于 2017-08-24T06:46:49.113 回答
0

这只写一个字母:

MS-访问 SQL:

SELECT Asc(Left([Title],1)) AS t FROM Master WHERE (((Asc(Left([Title],1)))=105));

Title是您要搜索的字段

MasterTitle是字段所在的表

105字符的ASCII码..

在这种情况下,只有以 i 开头的 Title,而不是 I

如果要搜索小写“a”,请将 105 更改为 97

于 2019-01-06T00:20:14.013 回答