0

在一张表中,我有一个条目

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-> UI 的文本框名称。

之前的任何东西 - 都需要退回,例如:

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

4

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

所以在你的例子中,它会是 Like '__-%' a space 后面跟 2 会是 Like '_2%' 并拿起你的所有三个例子,因为每个都是一个字符,后跟“2”,然后是另一个东西

于 2012-08-08T21:52:24.130 回答
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);
于 2012-08-08T21:53:41.850 回答