我在两个领域寻找任何类似的比赛时遇到了一些麻烦.例如,我有一个包含值的表:
CAR MAKE CAR MODEL
Ford Mustang (Shelby)
Toyota Corolla
Seat Leon
etc etc.
Run Code Online (Sandbox Code Playgroud)
我想通过搜索以下任何组合来获得结果"Ford,Mustang(Shelby)":
福特野马
或任何其他组合.
这可能吗?我有一个很好的搜索,但很难找到搜索术语来描述我的意思.
假设我有一张桌子:
当前表格:
title_id title_name title_qty
1 A.I. Artificial Intelligence 2
2 Batman Begins 40
3 2012 7
4 101 Dalmatians 23
5 Act of Valor 1
6 Batman 50
7 20 Million Miles to Earth 340
Run Code Online (Sandbox Code Playgroud)
我希望得到一个输出:
期望的输出:
title_id title_name title_qty title_char
4 101 Dalmatians 23 #
7 20 Million Miles to Earth 340 #
3 2012 7 #
1 A.I. Artificial Intelligence 2 A
5 Act of Valor 1 A
6 Batman 50 B
2 Batman Begins 40 B …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有星号的"Like"过滤记录,它在使用Access 2010返回许多记录时起作用.我很难过,为什么它与ADO一起使用时没有返回任何内容.代码包括多个表和列,以便进行故障排除我做了一个简单的查询.这是代码:
strsql = "SELECT tproducts.Prod_Name FROM tproducts " _
& " WHERE tproducts.Prod_Name Like " & Chr(34) & "SO*" & Chr(34)
Set cn = New ADODB.Connection
cn = connString
cn.Open
Set rs = New ADODB.Recordset
rs.Open strsql, cn, adOpenStatic, adLockOptimistic
' test here
iRecCount = rs.RecordCount
rs.MoveFirst
Run Code Online (Sandbox Code Playgroud)
Recordcount返回-1.
当"Like"被"equals"替换时,它返回正确的记录,所以我确信它能够连接到数据库,例如:
strsql = "SELECT tproducts.Prod_Name FROM tproducts " _
& " WHERE tproducts.Prod_Name = " & Chr(34) & "SONY Vaio SVD13213CXB" & Chr(34)
Run Code Online (Sandbox Code Playgroud)
有没有一种特殊的方法在ADO中使用Like运算符?
我可以通过哪些其他方式过滤以获得与使用"赞"相同的结果?例如,要查找所有" SVD "产品?
我有100万行这么大的表.表的结构
id int INDEX(not primary not unique just index)
lang_index varchar(5) INDEX
name varchar(255) INDEX
enam varchar(255) INDEX
Run Code Online (Sandbox Code Playgroud)
好.我查询
1查询
"SELECT name FROM table WHERE lang_index='en' AND name LIKE 'myname%'"
Run Code Online (Sandbox Code Playgroud)
这张大桌的速度还可以.大约0.02秒.
我尝试2查询
"SELECT name FROM table WHERE lang_index='en' AND (name LIKE 'myname%' OR enam LIKE 'myname%')"
Run Code Online (Sandbox Code Playgroud)
在230秒左右非常慢!
然后我尝试这3个查询
"SELECT name FROM table WHERE lang_index='en' AND enam LIKE 'myname%'"
Run Code Online (Sandbox Code Playgroud)
速度太棒了.大约0.02秒.
然后我更快地爆炸我的第二个查询两个查询(1和3查询).大约0.04秒但不简单.
为什么我的查询很慢?两个查询比一个查询快得多.我需要这样做我"SELECT name FROM table WHERE lang_index='en' AND (name LIKE 'myname%' OR enam LIKE 'myname%')"
怎么能让它更快?
我sqlite通过C API在Objective-C中使用.我的应用程序的一个预期功能是用户可以搜索人名,并且对于他们输入的每个新字符,执行SQL查询LIKE以查找名称符合匹配条件的所有人.我遇到的问题是参数化LIKE中的匹配,而不是按字面解释问号.也就是说,我相信目前的应用程序正在寻找包含?在其中的人名(没有人).
我的代码看起来像这样:
const char *sql = "SELECT rowid, name, email FROM person WHERE name LIKE '%?%'";
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare_v2(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK) {
NSLog(@"Problem preparing getFilteredPeopleStubs statement.");
}
if(sqlite3_bind_text(sqlStatement, 1, [searchText UTF8String], -1, SQLITE_TRANSIENT) != SQLITE_OK){
NSLog(@"Problem binding search text param.");
}
Run Code Online (Sandbox Code Playgroud)
基本上,searchText我希望这个名字来自哪里,但目前我认为它只是搜索名字中包含的人?,因为单引号'%?%'.是否有一个解决这个问题的方法仍然允许我使用参数化查询(防止SQL注入)并实现我所追求的目标?
Dim rc As Boolean = "2" Like "*?<*?"
Run Code Online (Sandbox Code Playgroud)
我不明白为什么rc等于True,肯定2不一样*?<*?.
上面的模式需要一个字符串
<)<符号是某处内部.据我所知,<不是一个特殊的角色,这意味着除了<Like运算符之外的其他东西.
使用Visual Studio 2010.
该问题的语句是:
把大陆说得对...
- 大洋洲成为澳大拉西亚
- 欧亚大陆和土耳其的国家去欧洲/亚洲
- 以'B'开头的加勒比群岛前往北美洲,其他加勒比岛屿则前往南美洲
显示所有国家的名称,原始大陆和新大陆.
我的解决方案
SELECT name, continent,
CASE WHEN continent='Oceania' THEN 'Australasia'
WHEN continent IN ('Europe', 'Asia') THEN 'Europe/Asia'
WHEN name='Turkey' THEN 'Europe/Asia'
WHEN continent='Caribbean' AND name LIKE 'B%' THEN 'North America'
WHEN continent='Caribbean' AND name NOT LIKE 'B%' THEN 'South America'
ELSE continent END
FROM world
Run Code Online (Sandbox Code Playgroud)
我从sqlzoo得到的结果是"错误答案.有些数据不正确."
我知道对文本字段进行索引可以帮助进行搜索like 'keyword%'.
但是,是否有任何跨数据库索引可以改善全文搜索like '%keyword%'?
通常,对于少于1000个字符的文本字段,like %keyword%查询的性能何时变得对Web请求不可接受?说当表达到10K行?
我试图查询数据库表以返回firstname列包含字符的所有记录" ".
例如Lars-Erik "Molle".
我试过这个:
SELECT * FROM [bgtest].[dbo].[cuscon] WHERE firstname LIKE '%Lars-Erik%'
Run Code Online (Sandbox Code Playgroud)
并且返回了记录,这只是我确保我正在做它然后我更换Lars-Erikwith ""和ofcourse,因为它现在看起来'%""%'它不喜欢它并且什么都不返回.
任何我尝试过的想法包含和喜欢并且无法想出办法.
谢谢
给出以下查询:
select ....................
from ......................
where
(
lower(c01) like ?
or lower(c02) like ?
or lower(c5x3_.c01) like ?
or lower(5x3_.c02) like ?
)
and(
(
lower(c03) like ?
or lower(c04) like ?
or lower(c5x3_.c03) like ?
or lower(5x3_.c04) like ?
)
/* ...Multiple further LIKEs... */
and status=1; /* status is a non-nullable value whose values can only be 1 or 2 */
Run Code Online (Sandbox Code Playgroud)
前10或12个限制是LIKE关于各种模式的 - 我知道这可能很慢,所以总是把状态标准放在第一位,即:
status=1;
and(other LIKEs)
Run Code Online (Sandbox Code Playgroud)
我的问题:首先应用更简单的限制是否会有性能提升(例如,在这种情况下,被比较的int值不能为空值,只有2个可能的值)?如果LIKE首先放置s并稍后显示状态检查,那么性能是否相同?
假设任何列都没有索引来简化问题.
sql-like ×10
sql ×6
mysql ×4
case ×2
performance ×2
ado ×1
c ×1
case-when ×1
database ×1
indexing ×1
ms-access ×1
objective-c ×1
search ×1
sql-server ×1
sqlite ×1
t-sql ×1
vb.net ×1
vb6 ×1
web ×1
where-clause ×1