web-dev-qa-db-ja.com

数値フィールドを使用してSQLでLIKE条件を使用するにはどうすればよいですか?

このクエリを使用して、特定のデータを取得しています。 "select * from emp where emp_name LIKE's% '";

emp_namは文字フィールドですが、数値フィールドで同じ論理条件を使用するにはどうすればよいですか?何かのようなもの:

"select * from emp where emp_id ????

ここで、emp_idは数値フィールドです。

ありがとう、

10
Mark

Accessでは、数値フィールドを空の文字列と連結して、LIKEを使用して比較できる文字列に強制変換できます。

select * from emp where emp_id & '' like '123*'

また、Accessはワイルドカード文字として%ではなく*を使用することに注意してください。参照: 演算子(Microsoft Access SQL)のように

8
Jason DeFontes

数値に対してワイルドカードを使用することはできませんが、本当に必要な場合は、数値をvarcharに変換してから、ワイルドカードの照合を実行できます。

例えば。

SELECT * FROM emp WHERE CONVERT(varchar(20), emp_id) LIKE '1%'
8
Robin Day

AccessデータベースエンジンのSQL構文で、%ワイルドカード文字を使用するには、ANSI-92クエリモードを使用する必要がありますOR ALIKEキーワードの代わりにLIKEキーワード。

ANSI-92クエリモードの詳細については、Access2003ヘルプの ANSI SQLクエリモード(MDB)について を参照してください(同じことがAccess2007のACEにも当てはまりますが、何らかの理由でAccess2007ヘルプからトピックが削除されました) 。コードでこれを行う場合は、OLE DBを使用する必要があります。例:ADO VBAのクラシック。

ALIKEキーワードの場合...あまり見つかりません。これは、公式に文書化されていない機能の1つです。つまり、Accessデータベースエンジンの将来のリビジョンから削除される可能性があるというリスクの要素があります。個人的には、検証ルールとCHECK制約に必要なANSI-89クエリモードとANSI-92クエリモードの両方を明示的にコーディングする必要があるというリスクを冒します(以下の例を参照)。両方のコーディングを行うことはできますが、正しく行うには時間がかかり、注意が必要です。つまり、間違えるとすぐにリスクが高まります。

それが答えです。さて、「解決策」について...

明らかに、emp_idに対してその種のクエリを実行する必要がある場合、ドメインは間違っています。つまり、数値フィールドであってはなりません。

病気を治す:スキーマを変更してこれをテキストフィールドにし、ドメインルールを追加して、数字のみが含まれるようにします。

CHECK (emp_id NOT LIKE '%[^0-9]%')

EDIT'Jet 'タグが追加されました。 Accessデータベースエンジンには独自の構文があるため、上記のCHECK制約を書き直す必要があります。^文字を!に置き換えます。また、これをANSI-89クエリモードとANSI-92クエリモードの両方と互換性を持たせるには、ALIKEキーワードを使用します。

CHECK (emp_id NOT ALIKE '%[!0-9]%')
3
onedaywhen

いいえ、数値フィールドにLIKEを使用することはできません。 <>または=>=<=;)を使用してみてください

数値フィールドで「12から始まる」やこのようなものを検索したい場合、デザインはニーズに合いません。

3
tuergeist

'%'ワイルドカードはMS-SQLサーバーで機能しました。 http://technet.Microsoft.com/en-us/library/aa933232%28v=sql.80%29.aspx を参照してください。

クエリselect * from MyTable where ID like '548%' MS-SQL Server 2008 R2で動作し、ID5481,5485などの結果を返します。ID列はintタイプです。

2
mukul

emp_idフィールドでcastまたはconvert関数を使用すると、likeと比較できます。

1
KuldipMCA

cONCATimplicを使用して整数を文字列に変換します

SELECT * FROM city WHERE CONCAT(id_city、 '')LIKE '%119%'

1
jfraber

こんにちは私はフロートでこれを行うのに問題がありました私は '%903%'のような2つのtims cast(cast(EmpId as bigint)as varchar(15))をキャストしなければなりませんでした

0
JacKjo

FileMaker SQLでは、STRVAL関数を使用して任意のフィールドを文字列にキャストできます。

SELECT * FROM emp WHERE STRVAL(emp_id) LIKE '1%'


これは、FileMakerでのこれの使用の実際の例です。

数値フィールドにASCII 0を含むすべてのレコードを一覧表示する方法

SELECT emp_id FROM emp WHERE STRVAL(someNumericField) LIKE '%'+CHR(0)+'%'

0
MrWatson