ワイルドカード

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

まず、ワイルドカードが一部違うよ。任意の文字を指定する場合、Accessではアスタリスク(*)を利用するけど、SQL Serverの場合は%記号を利用するんだ。
これは、通常のデータベースファイルの場合は「ANSI-89」を、SQL Serverのテーブルに接続したりADOを利用する場合には、「ANSI-92」というクエリモードを利用するからなんだ。
T_顧客マスタから「市」という文字が住所に含まれているレコードを取得するSQL文
SELECT * FROM T_顧客マスタ WHERE 住所 Like “*市*”
SELECT * FROM T_顧客マスタ WHERE 住所 Like ‘%市%’

日付の指定の仕方も違うよ。Accessの場合は#記号で囲むけど、SQL Serverの場合は、’(シングルコーテーション)で囲むんだ。
T_売上から、売上日が2022/01/01のレコードを取得するSQL文
SELECT * FROM T_売上 WHERE 売上日=#2022/01/01#
SELECT * FROM T_売上 WHERE 売上日=’2022/01/01′
文字列の連結

文字列の連結記号も違うんだ。Accessの場合は&記号を利用するけれど、SQL Serverの場合は+記号を利用するよ。また、連結する二つのフィールドとも文字列型を返さないと正しく機能しないので、Null値も想定して、IsNull関数を利用します。
住所1と住所2を連結するSQL文
SELECT [住所1] & [住所2] AS 住所 FROM T_顧客マスタ
SELECT ISNULL(住所1, ”) + ISNULL(住所2, ”) AS 住所 FROM T_顧客マスタ

他にもあるけど、主に利用するのは上記の点かな。
注意が必要なのは、IsNull関数は、Accessだと値がNull値かどうかを判断してTrue/Falseを返すのに対し、SQL ServerではNullだったら第二引数に指定した値を返すことだよ。つまり、AccessのNz関数と同じ役割をするんだ。
例:住所がNullだったら「住所不定」と返す場合
SQL Server IsNull([住所],’住所不定’)
Access Nz([住所],’住所不定’)
SQL ServerとAccess両方のデータベースの開発を交互にしていると、時々、上記を間違ってしまうことがあるので、皆さんもご注意ください。

いろいろあるんだね。
コメント