LIKE关键字是否会在SQLite和/或MySQL中使用索引?
我会理解通配符匹配可能不会使用索引,但是如何从比较开始?
我的简单sql语句是这样的:
SELECT USERNAME FROM ALL_USERS;
Run Code Online (Sandbox Code Playgroud)
但我想从结果中过滤系统用户.我搜索但找不到Oracle提供的任何内容; 所以我尝试了这样的声明,它不起作用:
select username from all_users where username not like '%SH%'
or username not like '%SYS%'
or username not in ('ANONYMOUS',
'DBSNMP',
'MGMT_VIEW',
'ORDPLUGINS',
'OUTLN',
'SI_INFORMATION_SCHEMA',
'WK_TEST',
'WKPROXY',
'XDB');
Run Code Online (Sandbox Code Playgroud)
这不起作用.我应该如何修改我的查询以获得所需的输出,或者可能有oracle提供的东西来获取预定义的系统帐户?
我正在使用 PHP 和 MySQL。我将在下面提供一个简单的表格:
------------------------------------------------------
| id | text |
------------------------------------------------------
| 1 | The quick brown fox jumped over the lazy dog |
------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我希望用户能够使用以空格分隔的关键字进行搜索。我有一个简单的 SQL 查询,SELECT * FROM table WHERE text LIKE %[$keyword]%这意味着如果我搜索“The quick fox”,我不会得到任何结果。有没有办法用空格分隔关键字,所以如果我搜索“The quick fox”,它将运行 3 次搜索。一个用于“The”,一个用于“quick”,一个用于“fox” - 删除所有空格。尽管它应该只显示一个结果,因为它都属于同一行而不是 3 个,因为所有 3 个关键字都与该行中的数据匹配。
做到这一点的最佳方法是什么?总是欢迎所有可以做得更好的建议。谢谢!
[编辑]
现在才想到这一点,用逗号 (,) 分隔关键字会是更好的选择吗?
我有一个数据库表mytable,列名采用 Varchar 格式,列日期为 Datetime 值。我想用按日期分组的某些参数来计算名称。这是我所做的:
SELECT
CAST(t.date AS DATE) AS 'date',
COUNT(*) AS total,
SUM(LENGTH(LTRIM(RTRIM(t.name))) > 4
AND (LOWER(t.name) LIKE '%[a-z]%')) AS 'n'
FROM
mytable t
GROUP BY
CAST(t.date AS DATE)
Run Code Online (Sandbox Code Playgroud)
似乎这里的范围语法有问题,如果我只是这样做,LIKE 'a%'它确实会正确计算所有以“a”开头的字段。但是,上面的查询为 n 返回 0,尽管应该计算包含至少一个字母的所有字段。
我想对我的Rails 4应用程序使用以下查询,但我担心SQL注入攻击:
@persons = People.where("persons.name LIKE ?", "%#{params[:search]}%")
Run Code Online (Sandbox Code Playgroud)
有人能告诉我写上述陈述的安全方法吗?我尝试了以下但不确定它是否是SQL注入证明:
search = "%" + params[:search] + "%"
@persons = People.where("persons.name LIKE ?", search)
Run Code Online (Sandbox Code Playgroud)
谢谢!
我在一个广告网站上工作。
我有一张桌子,每天有一列。我需要在表格中检查哪些广告被保存为默认值以仅更新这些广告。
我试过这个,但它不起作用。
SELECT Monday if (Monday LIKE '%default%'),
Tuesday if (Tuesday LIKE '%default%')
FROM `Ad_Relationshp`
Run Code Online (Sandbox Code Playgroud)
MySql 给了我这个错误:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取Ad_Relationshp在第 1 行的“if (Monday LIKE '%default%') FROM LIMIT 0”附近使用的正确语法。我尝试将语法更改为我能想到的所有内容,但我仍然遇到同样的错误。
在我的 PL/SQL 中有这个使用绑定变量的大动态 SQL。我使用 DBMS_SQL 包来绑定和执行生成的查询。
根据某些标准,将 where 子句添加到动态 SQL 中。当我只使用“in”或“=”来匹配我的绑定变量时,一切正常,结果返回速度非常快。
例子:
(servedparty = :bv_ or servedpartyimsi = :bv_)
但是,当我执行以下操作时:
(servedpartyimei like :bv_)
Run Code Online (Sandbox Code Playgroud)
并提供一个像 12345679890% 这样的值,查询需要非常非常长的时间。
我也试过这样的事情
(servedpartyimei like :bv_||'%')
然后提供没有 '%' 的值,但它给出了相同的结果
当我在没有绑定变量的情况下执行查询但只放置硬编码值时,结果也会立即返回。
我在这里做错了吗?不要像 LIKE 运算符那样绑定变量?有任何想法吗?
谢谢你。
我有一张桌子 t1
id | names
----|-------------------------
1 | {jully , alex , sarah}
2 | {bety , cate , jenifer}
3 | {adam , pit , joee}
4 | {piter , mat , andy}
Run Code Online (Sandbox Code Playgroud)
所以,我需要行至少有一个以“a”开头的名称,我需要的结果在下面
第 1 行:亚历克斯
第 3 行:亚当
第 4 行:安迪
id | names
-----|-------------------------
1 | {jully , alex , sarah}
3 | {adam , pit , joee}
4 | {piter , mat , andy}
Run Code Online (Sandbox Code Playgroud)
像这样的查询
select * from t1 where 'a' like% any t1.name
Run Code Online (Sandbox Code Playgroud) 从这里开始,我向自己询问此类查询的 elasticsearch 语法:
WHERE text LIKE "%quick%"
AND text LIKE "%brown%"
AND text LIKE "%fox%"
Run Code Online (Sandbox Code Playgroud)
我的尝试(不幸的是没有成功)
"query": {
"bool": {
"filter": [
{
"bool": {
"must": [
{
"terms": {
"text": [
"*quick*",
"*brown*",
"*fox*"
]
}
}
]
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试检查某些文本是否包含文本和 Postgres 数组中的值的串联,例如:
SELECT true from jsonb_array_elements('["a", "b"]'::jsonb) as ids
WHERE 'bar/foo/item/b' LIKE '%item/' || ids->>'id' || '%'
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR: invalid input syntax for type json Detail: Token "%" is invalid. Position: 95 Where: JSON data, line 1: %...
Run Code Online (Sandbox Code Playgroud)
如何利用数组的值,将它们与文本连接起来并检查LIKE表达式?
我已经尝试了几种明确添加演员表的想法::jsonb,但到目前为止还没有运气。