我希望能够从文本框中标记输入字符串以进行查询。 示例:用户在文本框中输入“abc xyz 123”。 我想这样做:
SELECT * FROM database WHERE Name contains "abc" AND "xyz" AND "123"
-- as opposed to containing "abc xyz 123"
-- please ignore my sql syntax, I am an absolute beginner
感谢。
答案 0 :(得分:6)
使用字符串拆分功能(例如,像this one),你可以这样:
SELECT t.*
FROM atable t
INNER JOIN dbo.Split(@UserInput, ' ') s ON t.Name LIKE '%' + s.Data + '%'
答案 1 :(得分:1)
一种可能的解决方案是你接受字符串并将其拆分为你的标记,然后将每个标记插入临时表中,然后将临时表加入到搜索表中,并在连接中执行类似'%'的操作tokenColumn +'%'获取包含令牌值的所有行
以下是拆分字符串的示例:http://blogs.microsoft.co.il/blogs/itai/archive/2009/02/01/t-sql-split-function.aspx
答案 2 :(得分:0)
您可以使用动态SQL来实现此目的:
declare @InputText varchar(8000)
set @InputText = 'abc xyz 123'
declare @CommorText varchar(8000)
set @CommorText = 'SELECT * FROM table WHERE Name like ''%' + replace(@InputText, ' ', '%'' or Name like ''%') + '%''';
-- @CommorText would look like this at this point
-- SELECT * FROM table WHERE Name like '%abc%' or Name like '%xyz%' or Name like '%123%'
execute(@CommorText)
[编辑] 回应阿维图斯的评论:
不是最完美的解决方案。但是,如果有人输入'drop table Test1',查询将为SELECT * FROM Test1 WHERE Name like '%drop%' or Name like '%table%' or Name like '%Test1%'
答案 3 :(得分:0)
我有同样的问题。我有1,200行字符串用空格字符分割。我的答案是使用像Open Office Calc这样的电子表格。然后,如果需要将它们放在db中,可以通过公式生成插入脚本。这不会使用SQL,但它可能像我一样解决你的问题。