スポンサーリンク

3つの事例から学ぶAccessとSQL Serverの抽出条件の違い

SQLの使い方
SELECT文
スポンサーリンク

ワイルドカード

リリ
リリ

AccessとSQL ServerのSELECT文の違いを教えて。

SE
SE

まず、ワイルドカードが一部違うよ。任意の文字を指定する場合、Accessではアスタリスク(*)を利用するけど、SQL Serverの場合は%記号を利用するんだ。

これは、通常のデータベースファイルの場合は「ANSI-89」を、SQL Serverのテーブルに接続したりADOを利用する場合には、「ANSI-92」というクエリモードを利用するからなんだ。

T_顧客マスタから「市」という文字が住所に含まれているレコードを取得するSQL文


Accessの場合

SELECT * FROM T_顧客マスタ WHERE 住所 Like “*市*”

SQL Serverの場合

SELECT * FROM T_顧客マスタ WHERE 住所 Like ‘%市%’

SE
SE

日付の指定の仕方も違うよ。Accessの場合は#記号で囲むけど、SQL Serverの場合は、’(シングルコーテーション)で囲むんだ。

T_売上から、売上日が2022/01/01のレコードを取得するSQL文


Accessの場合

SELECT * FROM T_売上 WHERE 売上日=#2022/01/01#

SQL Serverの場合

SELECT * FROM T_売上 WHERE 売上日=’2022/01/01′

文字列の連結

SE
SE

文字列の連結記号も違うんだ。Accessの場合は&記号を利用するけれど、SQL Serverの場合は+記号を利用するよ。また、連結する二つのフィールドとも文字列型を返さないと正しく機能しないので、Null値も想定して、IsNull関数を利用します。

住所1と住所2を連結するSQL文


Accessの場合

SELECT [住所1] & [住所2] AS 住所 FROM T_顧客マスタ

SQL Serverの場合

SELECT ISNULL(住所1, ”) + ISNULL(住所2, ”) AS 住所 FROM T_顧客マスタ

SE
SE

他にもあるけど、主に利用するのは上記の点かな。

注意が必要なのは、IsNull関数は、Accessだと値がNull値かどうかを判断してTrue/Falseを返すのに対し、SQL ServerではNullだったら第二引数に指定した値を返すことだよ。つまり、AccessのNz関数と同じ役割をするんだ。

例:住所がNullだったら「住所不定」と返す場合

 SQL Server   IsNull([住所],’住所不定’)
 Access          Nz([住所],’住所不定’)

SQL ServerとAccess両方のデータベースの開発を交互にしていると、時々、上記を間違ってしまうことがあるので、皆さんもご注意ください。

リリ
リリ

いろいろあるんだね。

コメント

タイトルとURLをコピーしました