投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/3/3 22:30:48
SQLは、データベースによって「方言」があります。

たとえば JET データベースの場合、SQL 中では Format 関数を使えません。
Access VBA から利用する場合は、VBA 側の関数を使う事ができるのですが、
VB.NET から利用する場合は、VBA や VB.NET の関数を呼び出せません。

河童さんは、何というデータベースをお使いなのでしょうか?

> 2011/03/01から2011/03/31の
> データを取得したいからです。
日付列が「文字列」型の場合は、
 WHERE 日付 LIKE '2011/03/%'
のように、LIKE 演算子を使うという手もあります。


また、相手が日付型の場合には、
 WHERE FORMAT(S.日付,'yyyy/MM') = '2011/03' 
ではなく、
 WHERE 日付 >= '2011/03/01' AND 日付 < '2011/04/01' 
のような問い合わせを行った方が良いでしょう。
(実際には、日付データをSQLに埋め込まず、パラメータ化して問い合わせた方が良いですが)

データ件数が多い場合、前者の処理ではデータ全件に対して FORMAT 変換が必要ですが、
後者では、日付列にインデックスがあればそれを使って範囲抽出する事ができるため
パフォーマンスが向上します。

ただし日付リテラルはDB によって異なるため、上記の問い合わせは
 WHERE 日付 >= #3/1/2011# AND 日付 < #4/1/2011#
 WHERE 日付 >= DATE '2011-03-01' AND 日付 < DATE '2011-04-01'
 WHERE 日付 >= TO_DATE('20110301', 'YYYYMMDD') AND 日付 < TO_DATE('20110401', 'YYYYMMDD')
などといった、実際のデータベースに沿った記述方式で書く必要があります。