我有像FVS101209GO5
这样的字符串存储在MS Access数据表中,我想计算特定年份的字符串数,所以在2010年的例子中
我在做
query = "SELECT SUM( IIF( Mid( KEYLastName, 4, 2) , 1,0)) AS occur FROM MyTable WHERE Year(mydate)=2010 ;"
对于@JW添加的示例
,字符串的长度为12或13qwe123456XXX - 2012
asd345678XXX - 2034
FVS101209GO5 - 2010
答案 0 :(得分:1)
似乎KEYLastName
中的第4和第5个字符代表一年的最后2位数字,因此“FVS101209GO5”代表2010年。如果这是正确的,您可以计算代表KEYLastName
值的数量2010年,这两个查询中的任何一个:
SELECT Sum(IIf(Mid(KEYLastName, 4, 2) = "10", 1, 0)) AS occur
FROM MyTable;
SELECT Count(IIf(Mid(KEYLastName, 4, 2) = "10", 1, Null)) AS occur
FROM MyTable;
但是,我不确定为什么你还有一个WHERE
子句将行限制为2010年mydate
的行。如果你想要那样,也要在{{1上创建一个索引并在上述查询之一中包含此mydate
子句。
WHERE
使用WHERE mydate >= #2010-1-1# AND mydate < #2011-1-1#
上的索引应该比要求数据库引擎将mydate
函数应用于表中每一行的Year()
值快得多。
答案 1 :(得分:1)
如果您希望在字符串中找到不同年份的出现次数,您可能希望使用:
SELECT Mid([KEYLastName],4,2) AS [Year],
Count(KEYLastName) AS CountOfOccurances
FROM MyTable
GROUP BY Mid([KEYLastName],4,2)
这将返回(4,2)处的所有两位数年份以及它们各自出现的次数。
编辑重新评论
SELECT KEYLastName,
Mid([KEYLastName],4,2) AS [Year],
DCount("*","MyTable","Mid([KEYLastName],4,2)="
& Mid([KEYLastName],4,2)) AS YearCount
FROM MyTable