我有一张117000左右的记录表.我需要执行搜索,检查给定字符串模式的3个单独字段.
我的where子句如下:
field1 LIKE '%' + @DESC + '%'
OR field2 LIKE '%' + @DESC + '%'
OR field3 LIKE '%' + @DESC + '%'
Run Code Online (Sandbox Code Playgroud)
无论输入如何,这似乎需要大约24秒......
有一个更好的方法吗?小于10(或5!)秒将更加可取.
谢谢你的帮助.
如何选择并不显示重复项?实际上,它显示的是:apple | 苹果| 苹果| 苹果
这是我的代码:
$search = $_GET['q'];
$query = "SELECT * FROM query WHERE searchquery LIKE '%$search%' AND searchquery <> '$search'";
Run Code Online (Sandbox Code Playgroud) 我们可以使用"NOT LIKE '%abc%'" 正好相反的LIKE '%abc%'吗?我试过并得到了一些结果,但看起来不正确!
有没有类似的东西regex in SQL.
例如:
我有一个3场的桌子.
id name address
1 xyz 1234 abcd
2 abc nomans land
3 omg #123 new-york
3 nom $123 &7up
Run Code Online (Sandbox Code Playgroud)
我可以用特殊字符获取地址**,而不是逐个检查每个特殊字符.怎么样
为什么以下评估为True?
Dim result = "b" Like "*a*b"
Run Code Online (Sandbox Code Playgroud)
谢谢.
编辑:
为了概括这一点,以下返回True:
"String1" Like "*AnyText1*AnyText2*AnyText???******????*String1"
Run Code Online (Sandbox Code Playgroud)
VBA正常工作,返回False.
PowerShell正常工作,返回False:
PS C:\Users\XXX> "b" -Like "*a*b"
False
Run Code Online (Sandbox Code Playgroud)
EDIT2:
错误报告的链接:https:
//connect.microsoft.com/VisualStudio/feedback/details/748415/a-bug-in-net-like-operator
我正在尝试这个:
SELECT FacilityID, FacilityName, CMSProviderID, [Provider Number]
FROM G2_Facility, SCIPHospitalCompare
WHERE [Provider Number] LIKE '%' + CMSProviderID + '%';
Run Code Online (Sandbox Code Playgroud)
我得到:
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value '%' to data type int.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我看到很多这样的例子做这样的事情,但由于某种原因它根本不起作用.
谢谢!
我正在使用SQLAlchemy在Flask上构建一个接口,其中一部分是搜索API.本质上,提前输入是使用其值(例如电子邮件)调用服务器,然后服务器在下面的过滤器中使用.like执行SQLalchemy查询
q = session.query(User).filter(User.email.like('%'+term+'%')).all()
Run Code Online (Sandbox Code Playgroud)
这个查询并没有真正返回任何有用的东西,并且在前几个字符之后,什么都没有.但是,如果我使用术语硬编码执行相同的查询,如下所示:
q = session.query(User).filter(User.email.like('%mysearchterm%')).all()
Run Code Online (Sandbox Code Playgroud)
它将返回结果完全正常,所以我将这个术语放入like()方法有一些东西,但我真的无法弄清楚问题是什么.该术语来自ajax POST,值在服务器端,只是.like()没有正确使用它.
"没有用"我的意思是返回的第一组结果与输入的实际术语无关,在长度高于3-4的术语之后,尽管DB中存在匹配的项目,但没有返回结果.
任何帮助非常感谢.
我在SQL Server数据库中有一个表,其中包含一个地址字段(例如,1 Farnham Road,Guildford,Surrey,GU2XFF),我想在搜索字符串之前和之后使用通配符进行搜索.
SELECT *
FROM Table
WHERE Address_Field LIKE '%nham%'
Run Code Online (Sandbox Code Playgroud)
我在这张表中有大约200万条记录,我发现查询需要5-10秒,这并不理想.我相信这是因为前面的通配符.
我认为我说的是,由于前面的通配符,任何索引都不会用于搜索操作.
使用全文搜索和CONTAINS是不可能的,因为我想搜索单词的后半部分(我知道你可以在下面的查询中替换Guil*的搜索字符串,这将返回结果).当然运行以下返回没有结果
SELECT *
FROM Table
WHERE CONTAINS(Address_Field, '"nham"')
Run Code Online (Sandbox Code Playgroud)
有没有办法优化前面的通配符查询?
在查询1上,即使id是索引列,也正在执行全表扫描.查询2实现了相同的结果,但速度更快.如果运行查询1返回索引列,则它会快速返回,但如果返回非索引列或整行,则查询需要更长时间.
在查询3中,它运行得很快但是"代码"列是VARCHAR2(10)而不是NUMBER(12),并且索引方式与"id"相同.
为什么查询1没有意识到它应该使用索引?是否应该更改某些内容以允许索引编号列更快地执行?
[查询1]
select a1.*
from people a1
where a1.id like '119%'
and rownum < 5
Run Code Online (Sandbox Code Playgroud)
解释计划
SELECT STATEMENT ALL_ROWS
成本:67字节:2,592基数:4
2 COUNT STOPKEY
1表访问全表人员
费用:67字节:3,240基数:5
[查询2]
select a1.*
from people a1, people a2
where a1.id = a2.id
and a2.id like '119%'
and rownum < 5
Run Code Online (Sandbox Code Playgroud)
解释计划
SELECT STATEMENT ALL_ROWS
成本:11字节:2,620基数:4
5 COUNT STOPKEY
4表格访问按行ROWID表人员
成本:3字节:648基数:1
3 NESTED LOOPS
成本:11字节:2,620基数:4
1 INDEX FULL FULL SCAN INDEX people_IDX3
成本:2字节:54,796基数:7,828
2 INDEX RANGE SCAN INDEX people_IDX3
成本:2基数:1
[查询3]
select a1.* …Run Code Online (Sandbox Code Playgroud) 我必须这样做Restrictions.like("sequenceNo", "%" + Integer.valueOf(sequenceNo.trim()) + "%").
该字段sequenceNo是整数类型,但sequenceNo参数值是字符串.我的问题是我得到一个例外java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer.出于某些原因,我真的必须使我的param成为字符串数据类型.当我在SQL中尝试使用LIKE一个整数时,它可以工作.
请帮忙.谢谢.
我只是发现mysql可以使用如下方式查询datetime:
like '2013-06-12%'
Run Code Online (Sandbox Code Playgroud)
我认为它不能使用索引.我谷歌,但直接找不到这样的主题.所以我使用3308614记录的表进行了测试.第一个SQL:
SELECT * FROM subscription t WHERE DATE(t.active_time) = '2013-06-30';
Run Code Online (Sandbox Code Playgroud)
我们都知道这个SQL不能使用索引,需要4秒才能得到结果.第二个SQL:
SELECT * FROM subscription t WHERE t.active_time LIKE '2013-06-30%';
Run Code Online (Sandbox Code Playgroud)
我不知道它是否可以使用索引,但它也需要4秒.第三个SQL:
SELECT * FROM subscription t WHERE t.active_time > '2007-11-30' AND t.active_time < '2007-12-01';
Run Code Online (Sandbox Code Playgroud)
我们都知道第三个SQL可以使用索引,它需要0.016秒.
所以我认为'like'在查询datetime字段时不能使用索引,因为mysql应该首先将datetime字段转换为字符串并将字符串发送到like命令.它是否正确 ?