0

c# winform にマスクされたテキスト ボックスがあります。

マスキングは次のようになります

 - (two numbers on the front and 4 number on the right after the dash).

for ex: 12-3456

のようなより多くの順列があります

   - (3 spaces on the front and 5 on the right)

for ex: 123-34567

ユーザーが 123-34567 と入力すると、select sql クエリは

123-34567

ユーザーが 12-3456 と入力すると、select sql クエリは

12-3456

ユーザーが「-」と入力すると、select sql クエリはのみを返す必要があります

12-3456 (つまり、2 つのスペースを入力)

ユーザーが「-」と入力すると、select sql クエリはのみを返す必要があります

123-34567 (つまり、3 つのスペースを入力)

つまり、ユーザーは何も入力せずに検索でき、マスクのみを有効にしたテキスト ボックスと検索 (空 - 空) - ダッシュ マスクのみ、マスクに数字を入力して検索します (例: 12- )。

使用しているクエリは

select column1,column2 from table1 where column2 like '%__-%';

(アンダースコアは動的に計算されます)そして、他の最適なアプローチでこれを取得するにはどうすればよいですか(たとえば、単一のクエリのように)?

この table1 と、データベースに列 "MaskedInfo" があるとします。

Table1:

MaskedInfo  

1234567
12-34567
123-4567
123-45678

ユーザーは、12-34567 または 123-4567 または単に 1234567 のように検索するものを入力できます。テキスト ボックスが空の場合は、結果のすべてを読み込みます。

4

2 に答える 2

0

問題は最初の%のようです。アンダースコアのユーザー入力のスペースを変更しています。その通りですが、最初の%は、アンダースコアの前に何かを表示して結果を取得します。

like '%__-%'  //(two underscores) 

-の前に2桁以上あるものはすべて取得されます。

like '%___-%'  //(three underscores) 

-の前に3桁以上あるものはすべて取得されます

最初の%を削除すると、アンダースコアとまったく同じ桁数の結果が得られます

于 2012-08-16T17:38:04.360 に答える
0

charindex の使用を試すことができます。

WHERE (@search = '' OR charindex('-', @search) = charindex('-', column2))

于 2012-08-24T19:10:52.897 に答える