在SQL server中使用空格进行搜索

在SQL server中使用空格进行搜索,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,在表中我有一个条目 12-345678 123-456-789 123456789 在UI文本框中,当有人键入:-两个空格然后一个破折号时 输出应为: 12-345678 在UI文本框中,当有人键入:12- 输出应为: 12-345678 12-345678 在UI文本框中,当有人键入:12 要执行此操作的select查询是 select column1,column2 from table1 where column1 like '%textbox1.text%'; tex

在表中我有一个条目

12-345678
123-456-789
123456789
在UI文本框中,当有人键入:-两个空格然后一个破折号时

输出应为:

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

输出应为:

12-345678   
12-345678

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

要执行此操作的select查询是

select column1,column2 from table1 where column1 like '%textbox1.text%';
textbox1.text->UI的textbox名称


之前的任何内容-需要退回,例如:

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中修改查询?

类似于

"Select column1,column2 From Table1 Where column like " + textbox1.text.Replace(' ','_') + "%" 
当然,您应该使用参数化查询

sql通配符是

% 0 to n of any character
underscore 1 single character
[xyz] any single character that is x, y or z
因此,在您的示例中,它将类似于“\uuuu-%” 一个由2折叠的空格类似于“_2%”,并同时选取您的三个示例,因为每个示例都是一个字符,后跟2,后跟其他类似的内容

"Select column1,column2 From Table1 Where column like " + textbox1.text.Replace(' ','_') + "%" 
当然,您应该使用参数化查询

sql通配符是

% 0 to n of any character
underscore 1 single character
[xyz] any single character that is x, y or z
因此,在您的示例中,它将类似于“\uuuu-%”
如果我理解正确的话,一个由2折叠的空格就像“_2%”一样,并同时选取您的三个示例,因为每个示例都是一个字符,后跟2,后跟一些其他内容。

:如果有前导空格,您需要将它们转换为_。对于没有前导空格的情况,可以只追加%

我怀疑您需要一行修复,但尽管您可能会将其全部打包到一个iff中,但如果可能的话,我会避免这样做

编辑以添加

C:


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

我怀疑您需要一行修复,但尽管您可能会将其全部打包到一个iff中,但如果可能的话,我会避免这样做

编辑以添加

C:


你是说两个空格和一个破折号应该返回12-345678,因为它是唯一一个第三个字符是破折号的字符吗?之前的任何字符都需要返回,例如:如果键入12-,则返回输出应该是12-345678,如果键入123-,那么返回输出应该是123-456-789。你是说两个空格和一个破折号应该返回12-345678,因为它是唯一一个第三个字符是破折号的字符吗?之前的任何字符都需要返回,例如:如果键入12-,返回输出应该是12-345678,如果键入123-,那么返回输出应该是123-456-789。谢谢,我会在sql中标识之前的空间吗?你是从其他语言调用sql吗?我本应该使用sql,但我需要用C进行验证计算空间。谢谢,我会在sql中标识之前的空间吗?你是从其他语言调用sql吗?我本应该使用sql,但我需要用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);