在SQL Server中使用空格搜索

时间:2012-08-08 21:32:49

标签: sql sql-server sql-server-2008 tsql

在表格中我有一个条目

12-345678
123-456-789
123456789

在UI文本框中,当有人输入:  - (two spaces then one dash).

时 输出应该是:

12-345678   

在UI文本框中,当有人输入:12-

时 输出应该是:

12-345678

在UI文本框中,当有人输入:12

12-345678
123-456-789
123456789

我的选择查询是

select column1,column2 from table1 where column1 like '%textbox1.text%';

textbox1.text->用户界面的文本框名称。

之前的任何事情 - 需要退回,例如:

if you type 12-, return output should be 12-345678 alone,
if you type 123-, then the return output should be 123-456-789 alone.
if you type - (only dash, no space on the front , then the return output should be 12-345678 and 123-456-789 .

然而它在几个条件下失败了,有没有办法可以直接在sql中计算空间并修改查询?

2 个答案:

答案 0 :(得分:2)

这样的东西
"Select column1,column2 From Table1 Where column like " + textbox1.text.Replace(' ','_') + "%" 

'当然你应该使用参数化查询。

sql wild card chars

% 0 to n of any character
underscore 1 single character
[xyz] any single character that is x, y or z

所以在你的例子中它会像'__-%' 2下面的空间就像'_2%'一样,也可以选择你所有的三个例子,因为每一个都是一个字符,后跟“2”,然后是其他一些东西

答案 1 :(得分:1)

如果我理解正确:当有前导空格时,您需要将它们转换为_。对于没有前导空格的情况,您只需附加%

<space><space>-  '__-%'
12-              '12-%'
12               '12%'
123-             '123-%'

但这个不符合模式,所以这是一个特例:

-                '%-%'

我怀疑你想要一个单行修复,但是虽然你可以将它全部打包成一个iff(),但如果可能的话我会避免这种情况。

已编辑添加

C#:

string arg = theTextbox.Text;
arg = arg.Replace("'", "''"); // avoid SQL injection attack

arg = arg.Replace(" ", "_"); // space = single character wildcard = '_'

if (arg.StartsWith("-")) // special case
    arg = "%-";

string sqlStatement = string.Format("SELECT column1, column2 " +
             "FROM table1 WHERE column1 like '{0}%', arg);