我想知道区分大小写的MS Access选择查询。
我有两个VitualMonitorName值,如下所示
VCode VirtualMonitorName
Row 1 (1, 'VM1');
Row 2 (2, 'Vm1');
这两个值都不同。
如果我写
"SELECT VCode FROM VirtualMaster WHERE VirtualMonitorName like '" + Vm1 + "'";
它仅回复VCode = 1。
答案 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的四种方法。这些方法中的每一种都具有在选择实现之前应该权衡的优点和缺点。方法是:
答案 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
是您要搜索的字段
Master
是Title
字段所在的表格
105
字符的ASCII码。.
在这种情况下,只有标题以我开头而不是我
如果要搜索小写字母“ a”,则可以将105更改为97