1

MS Access データ テーブルに格納されているような文字列がFVS101209GO5あります。特定の年の文字列の数をカウントしたいので、この例では 2010 年になります

やっていた

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

@JW が追加した例では、文字列の長さは 12 または 13 です。

qwe123456XXX       -  2012
asd345678XXX       -  2034  
FVS101209GO5       -  2010
4

2 に答える 2

1

文字列内のさまざまな年の出現回数を見つけたい場合は、次のように使用できます。

SELECT Mid([KEYLastName],4,2) AS [Year], 
       Count(KEYLastName) AS CountOfOccurances
FROM MyTable
GROUP BY Mid([KEYLastName],4,2)

これは、(4,2) の 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 に答える
1

の 4 番目と 5 番目の文字はKEYLastName年の下 2 桁を表しているようです。したがって、「FVS101209GO5」は 2010 年を表しています。それが正しければKEYLastName、次の 2 つのクエリのいずれかで 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場合は、インデックスを作成しmydate、このWHERE句を上記のクエリのいずれかに含めます。

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

インデックスをオンにすると、テーブル内のすべての行の値に関数をmydate適用するように db エンジンに要求するよりもはるかに高速になります。Year()mydate

于 2012-12-17T23:09:45.150 に答える