在表格中我有一个条目
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中计算空间并修改查询?
答案 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);