1

我有类似FVS101209GO5存储在 MS Access 数据表中的字符串,我想计算某一年的字符串数,所以在示例中是 2010 年

我在做

query = "SELECT SUM( IIF( Mid( KEYLastName, 4, 2) , 1,0)) AS occur FROM MyTable WHERE Year(mydate)=2010 ;"

字符串的长度是 12 或 13,对于 @JW 添加的示例

qwe123456XXX       -  2012
asd345678XXX       -  2034  
FVS101209GO5       -  2010
4

2 回答 2

1

似乎第 4 和第 5 个字符KEYLastName代表一年的最后 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子句将行限制mydate为从 2010 年开始的行。如果您也想要这样,请创建一个索引mydate并将此WHERE子句包含在上述查询之一中。

WHERE mydate >= #2010-1-1# AND mydate < #2011-1-1#

使用索引mydate应该比要求数据库引擎将Year()函数应用于mydate表中每一行的值要快得多。

于 2012-12-17T23:09:45.150 回答
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
于 2012-12-18T00:53:46.010 回答