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

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

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

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

将得到任何在 - 之前有两个或多个数字的东西,

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

将得到任何在 - 之前有三个或更多数字的东西

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

于 2012-08-16T17:38:04.360 回答
0

您可以尝试使用 charindex:

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

于 2012-08-24T19:10:52.897 回答