从我的前任接收一些代码,我发现了一个使用Like运算符的查询:
SELECT*FROM供应商WHERE supplier_name喜欢'%'+ name +%';
试图避免SQL注入问题和参数化这个但我不太确定如何实现.有什么建议 ?
请注意,我需要一个经典ADO.NET的解决方案 - 我真的没有将这些代码转换为类似LINQ的东西.
$test = sprintf("SELECT * FROM `table` WHERE `text` LIKE '%%s%'", mysql_real_escape_string('test'));
echo $test;
Run Code Online (Sandbox Code Playgroud)
输出:
SELECT * FROM `table` WHERE `text` LIKE '%s
Run Code Online (Sandbox Code Playgroud)
但它应该输出:
SELECT * FROM `table` WHERE `text` LIKE '%test%'
Run Code Online (Sandbox Code Playgroud) 我有几百万个域名的SQL表.但现在当我搜索让我们说
SELECT *
FROM tblDomainResults
WHERE domainName LIKE '%lifeis%'
Run Code Online (Sandbox Code Playgroud)
获得结果需要10分钟以上.我试过索引,但没有帮助.
存储这数百万条记录并在短时间内轻松访问这些信息的最佳方法是什么?
到目前为止,大约有5000万条记录和5列.
我有一个带有phone列的表,其中数据可能在数字之间有空格,点,短划线或+符号.我需要使用忽略所有这些字符的LIKE通配符进行搜索,例如:
不幸的是我无法清理原始表以删除非数字字符并执行简单的SELECT LIKE%...%.
MYSQL具有替换/删除字符串中的字符的功能,但无法在具有widlcarded LIKE的查询中找到使用它们的方法.
任何帮助都感激不尽.
我想用Hibernate实现一些通用过滤器Criteria.它应该像LIKESQL中的运算符一样工作:
SELECT * FROM table WHERE table.ANYCOLOUMNHERE LIKE '%'||anyvaluehere||'%'
Run Code Online (Sandbox Code Playgroud)
我Map<String, String>这里的关键是列名,价值是它的价值.
我试过这样的事情:
for (Entry<String, String> filter : filters.entrySet()) {
crit.add(Restrictions.ilike(filter.getKey(), filter.getValue(), MatchMode.ANYWHERE));
}
Run Code Online (Sandbox Code Playgroud)
但是当字段类型不是String时,它会导致 java.lang.ClassCastException:
[com.nsn.util.LoggerUtilerror] (http-localhost-127.0.0.1-8080-1) Error while getting alarms: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Long
at org.hibernate.type.descriptor.java.LongTypeDescriptor.unwrap(LongTypeDescriptor.java:36) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1.doBind(BigIntTypeDescriptor.java:57) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:92) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:305) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:300) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.loader.Loader.bindPositionalParameters(Loader.java:1891) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.loader.Loader.bindParameterValues(Loader.java:1862) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1737) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.loader.Loader.doQuery(Loader.java:828) [hibernate-core-4.1.1.Final.jar:4.1.1.Final]
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289) …Run Code Online (Sandbox Code Playgroud) 我有一个商店程序,我计划用于搜索并获取所有值.
场景:
如果传递的参数是NULL它应该返回表的所有值,如果传递的参数不是,NULL它应该根据LIKE中的条件返回值.
//查询:
ALTER procedure [dbo].[usp_GetAllCustomerDetails]
(
@Keyword nvarchar(20) = null
)
As
Begin
Select CustomerId,CustomerName,CustomerTypeName,CustomerCode,CategoryName,CustomerMobile,CustomerEmail,CustomerAddress,CustomerCity,CustomerState,Pincode
from tblCustomerMaster CM
inner join dbo.tblCustomerTypeMaster CTM on CTM.CustomerTypeId = CM.CustomerType
inner join dbo.tblCategoryMaster CCM on CCM.CategoryId= CM.CustomerCategory
where CustomerName like '%'+@Keyword+'%'
Run Code Online (Sandbox Code Playgroud)
在上面的查询,当我执行,因为没有返回值NULL被假定为string通过SQL,所以我应该怎么了在写where子句,以获得所需的输出?
我有一个SQL查询SELECT * FROM table WHERE column LIKE '%pdd%'.
问题是我需要得到所有结果,不包括那些以"pdd"开头的结果,我的意思是找到"pdd"不在开头的所有内容.怎么可能呢?
当它不在列的开头时,我需要匹配"pdd".
我正在根据某个nvarchar列的第一个字母而不是通常的列创建结果分页,这通常会在结果数量上进行分页.
我是否面临使用LIKEoperator或equality(=)运算符过滤结果的挑战.
select *
from table
where name like @firstletter + '%'
Run Code Online (Sandbox Code Playgroud)
与
select *
from table
where left(name, 1) = @firstletter
Run Code Online (Sandbox Code Playgroud)
我已经尝试在网上搜索两者之间的速度比较,但是很难找到任何结果,因为大多数搜索结果与功能有关LEFT JOINs而不是LEFT功能.
我现在正在学习MySQL.我需要你帮助理解这些查询之间的区别:
select id from tab where id like '000';
select id from tab where id regex '000';
Run Code Online (Sandbox Code Playgroud) 我试图LIKE在LINQ to Objects中模拟运算符.这是我的代码:
List<string> list = new List<string>();
list.Add("line one");
list.Add("line two");
list.Add("line three");
list.Add("line four");
list.Add("line five");
list.Add("line six");
list.Add("line seven");
list.Add("line eight");
list.Add("line nine");
list.Add("line ten");
string pattern = "%ine%e";
var res = from i in list
where System.Data.Linq.SqlClient.SqlMethods.Like(i, pattern)
select i;
Run Code Online (Sandbox Code Playgroud)
它没有得到我的结果,因为System.Data.Linq.SqlClient.SqlMethods.Like它只是为了翻译成SQL.
LIKE在LINQ to Objects世界中是否存在类似于sql 运算符的东西?