このクエリを使用して特定のデータを取得しています: "select * from emp where emp_name LIKE 's%'";
emp_nam は文字フィールドですが、数値フィールドで同じ論理条件を使用するにはどうすればよいですか? 何かのようなもの:
"select * from emp where emp_id ????
ここで、emp_id は数値フィールドです。
ありがとう、
数値に対してワイルドカードを使用することはできませんが、どうしても必要な場合は、数値を varchar に変換してからワイルドカード マッチを実行できます。
例えば。
SELECT * FROM emp WHERE CONVERT(varchar(20), emp_id) LIKE '1%'
LIKE
いいえ、数値フィールドには使用できません。<
、>
または=
、、>=
を使用してみてください<=
;)
「12 で始まる」またはこのような sth などを数値フィールドで検索する場合、設計はニーズに適合しません。
Access データベース エンジンの SQL 構文で%
ワイルドカード文字を使用するには、ANSI-92 クエリ モードを使用するか、ALIKE
キーワードの代わりにキーワードを使用する必要がありますLIKE
。
ANSI-92 クエリ モードの詳細については、Access2003 ヘルプの ANSI SQL クエリ モード (MDB) についてを参照してください ( Access2007 の ACE にも同じことが当てはまりますが、何らかの理由で Access2007 ヘルプからトピックが削除されました)。これをコードで行う場合は、OLE DB (VBA の ADO クラシックなど) を使用する必要があります。
キーワードについてはALIKE
... あまり見つかりません。これは公式に文書化されていない機能の 1 つであり、Access データベース エンジンの将来のリビジョンから削除される可能性があることを意味します。個人的には、検証ルールと制約に必要な ANSI-89 クエリ モードと ANSI-92 クエリ モードの両方を明示的にコーディングするよりもリスクを冒しCHECK
ます (以下の例を参照)。両方のコーディングを行うことはできますが、正しく行うには時間がかかり、注意が必要です。つまり、間違った場合の差し迫ったリスクが高くなります。
それが答えです。さて、「解決策」は…
明らかに、emp_id に対してそのようなクエリを実行する必要がある場合は、ドメインが間違っています。つまり、数値フィールドであってはなりません。
病気を治す: スキーマを変更してこれをテキスト フィールドにし、ドメイン ルールを追加して数字のみが含まれるようにします。
CHECK (emp_id NOT LIKE '%[^0-9]%')
「Jet」タグを編集して追加しました。CHECK
Access データベース エンジンには独自の構文があるため、上記の制約を書き直す必要があります。^
文字を に置き換えます!
。また、これを ANSI-89 クエリ モードと ANSI-92 クエリ モードの両方と互換性を持たせるには、ALIKE キーワードを使用します。
CHECK (emp_id NOT ALIKE '%[!0-9]%')
CONCAT暗黙の変換を使用して整数を文字列に変換する
SELECT * FROM 都市 WHERE CONCAT(id_city,'') LIKE '%119%'
フィールドで使用cast
またはconvert
機能するemp_id
と、 と比較できますlike
。
こんにちは、「%903%」のように 2 つの tims cast(cast(EmpId as bigint) as varchar(15)) をキャストしなければならなかったフロートでこれを行うのに問題がありました