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

时间:2012-04-06 16:59:51

标签: 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。

5 个答案:

答案 0 :(得分:11)

您可以将StrComp()函数与vbBinaryCompare一起用于区分大小写的比较。以下是立即窗口中的示例,以显示StrComp()的工作原理。有关详细信息,请参阅Access帮助主题。

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

? StrComp("a", "A",vbTextCompare)
0
如果前两个参数计算为相等,则返回0;如果它们不相等,则返回1或-1;如果任一参数为Null,则返回Null。

要在查询中使用该函数,请提供StrComp()常量的值(0)而不是其名称。

vbBinaryCompare

如果他们使用较新的Access数据库引擎(“ACE”)驱动程序,则此方法也可用于其他应用程序的查询。例如,以下C#代码

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

产生

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()));
    }
}

答案 1 :(得分:2)

检查出来:

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

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

  • STRCOMP
  • 区分大小写的IISAM驱动程序
  • 十六进制扩展
  • Binary Field

答案 2 :(得分:1)

仅使用内置函数,在查询设计视图中添加其他自定义列:

protected void getPlanIds() {
    int count = 0;
    for(StorePlan plan : storePlanDao.getPlans()) {
        for (File file : getPDFs()) {
            String  planFileId = file.getName().substring(0, 4);

            if(plan.getId() != Integer.valueOf(planFileId)) {
                file.delete();
                count++;
            }
        }
    }   
}

零参数在找到&#34; VM1&#34;的位置时请求二进制比较(区分大小写)。在location: InStr(1,[VCode],"VM1",0)

之内

将该列中的条件设置为[VCode],因此只有匹配>0的vcode中包含非零位置的记录才包含确切的VM1字符串 -

Like "*vm*"子句如下:

WHERE

答案 3 :(得分:0)

使用更简单的编码级别。

作为DCOUNT操作中的条件,检查必须具有正确Case的Field(Column),并忽略Blank States / Territories。

      '  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")

答案 4 :(得分:0)

这只会写一个字母:

MS-ACCESS SQL:

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

Title是您要搜索的字段

MasterTitle字段所在的表格

105字符的ASCII码。.

在这种情况下,只有标题以我开头而不是我

如果要搜索小写字母“ a”,则可以将105更改为97