屏蔽文本框搜索和SQL查询

时间:2012-08-16 17:24:31

标签: c# sql winforms tsql maskedtextbox

我在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(即输入两个空格)

     

当用户键入 - 时,select sql查询应该   仅返回

     

123-34567(即输入三个空格)

     

换句话说,用户可以在不输入任何内容的情况下进行搜索   只有掩码启用文本框和   search(空 - 空) - 只有破折号掩码,键入数字   掩码和搜索(例如: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并且如果文本框是empy,则在结果中加载所有内容。

2 个答案:

答案 0 :(得分:0)

问题似乎是第一个%,你正在更改用户输入下划线的空格,你是对的但是第一个%会在下划线之前得到你的结果, 所以

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

将获得在 - ,

之前有两位或更多位数的任何内容
like '%___-%'  //(three underscores) 

将获得在 -

之前有三位或更多位数的任何内容

删除第一个%将获得与下划线具有完全相同数字的结果

答案 1 :(得分:0)

您可以尝试使用charindex:

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