如何在SQL Server的存储过程中转义字符串,以便在LIKE表达式中使用它是安全的.
假设我有一个NVARCHAR像这样的变量:
declare @myString NVARCHAR(100);
Run Code Online (Sandbox Code Playgroud)
我想在LIKE表达式中使用它:
... WHERE ... LIKE '%' + @myString + '%';
Run Code Online (Sandbox Code Playgroud)
如何在T-SQL中转义字符串(更具体地说,对LIKE模式匹配有意义的字符,例如%或?),以便以这种方式使用它是安全的?
例如,给定:
@myString = 'aa%bb'
Run Code Online (Sandbox Code Playgroud)
我想要:
WHERE ... LIKE '%' + @somehowEscapedMyString + '%'
Run Code Online (Sandbox Code Playgroud)
匹配'aa%bb','caa%bbc'但不是'aaxbb'或'caaxbb'.
我找到了一个用PATINDEX找到下划线位置的解决方案:
DECLARE @a VARCHAR(10)
SET @a = '37_21'
PRINT PATINDEX('%_%', @a) -- return 1 (false)
PRINT PATINDEX('%!%', REPLACE(@a, '_', '!')) -- return 3 (correct)
Run Code Online (Sandbox Code Playgroud)
你有其他想法吗?像逃避下划线角色的方式?
无论出于什么原因,我都会打电话给这些课程.main_sub1,.main_sub2等等.别担心我为什么不能参加.main .sub.
有没有一种方法可以使用jQuery来处理属性,以获取包含的类main?
这个领域table.name包含'Stylus Photo 2100'并具有以下查询
SELECT `name` FROM `table` WHERE `name` LIKE '%Stylus 2100%'
Run Code Online (Sandbox Code Playgroud)
我没有结果.当然,如果我搜索,我会的
SELECT `name` FROM `table` WHERE `name` LIKE '%Photo 2100%'
Run Code Online (Sandbox Code Playgroud)
如何通过搜索"Stylus 2100"来选择记录?
谢谢
我有以下代码:
const string Sql =
@"select distinct [name]
from tblCustomers
left outer join tblCustomerInfo on tblCustomers.Id = tblCustomerInfo.CustomerId
where (tblCustomer.Name LIKE '%@SEARCH%' OR tblCustomerInfo.Info LIKE '%@SEARCH%');";
using (var command = new SqlCommand(Sql, Connection))
{
command.Parameters.AddWithValue("@SEARCH", searchString);
...
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,我也试过这个:
const string Sql =
@"select distinct [name]
from tblCustomers
left outer join tblCustomerInfo on tblCustomers.Id = tblCustomerInfo.CustomerId
where (tblCustomer.Name LIKE @SEARCH OR tblCustomerInfo.Info LIKE @SEARCH );";
using (var command = new SqlCommand(Sql, Connection))
{
command.Parameters.AddWithValue("@SEARCH", "'%" + searchString + "%'");
... …Run Code Online (Sandbox Code Playgroud) 当我需要使用LIKE%..%语句中的字段中的值时,我偶然发现了一个微妙的SQL问题.
例:
SELECT t1.Notes, t2.Name
FROM Table1 t1, Table2 t2
WHERE t1.Notes LIKE '%t2.Name%'
Run Code Online (Sandbox Code Playgroud)
这只是我头脑中的一个例子来展示我需要做什么(我知道这不起作用).我需要在LIKE%..%中使用t2.Name的值
我想当你知道它时,这是微不足道的;)
我有一个mysql表,其中有一个列将xml存储为字符串.我需要找到xml列包含6个字符的给定字符串的所有元组.没有其他事情 - 我需要知道的是这个6字符串是否存在.
因此,将文本格式化为xml可能无关紧要.
问题:如何在mysql中搜索?即
SELECT * FROM items WHERE items.xml [contains the text '123456']
有没有办法可以使用LIKE运算符来执行此操作?
我有一张包含200条记录的表格,其中10条记录的文字包含"TAX"字样.
当我执行时
Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'
Run Code Online (Sandbox Code Playgroud)
然后我正确地得到了这10条记录的结果集.
但是,当我试图排除那些记录
Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'
Run Code Online (Sandbox Code Playgroud)
它仅返回100条记录,而不是190条记录.
我的数据库中有这些文字,
categories_posts
categories_news
posts_add
news_add
Run Code Online (Sandbox Code Playgroud)
我不想选择行categories,我使用这样的查询,
SELECT *
FROM developer_configurations_cms
WHERE developer_configurations_cms.cat_id = '1'
AND developer_configurations_cms.cfg_variables LIKE '%parent_id=2%'
AND developer_configurations_cms.cfg_name_unique NOT LIKE '%categories%'
Run Code Online (Sandbox Code Playgroud)
但它也会在输出中返回这两个......
categories_posts
categories_news
Run Code Online (Sandbox Code Playgroud)
如何在查询中忽略它们?
谢谢.
我无法弄清楚下划线字符在SQLite like语句中的作用.通配符%可能与大多数其他SQL数据库中的相同.
那个该死的_角色做了什么?