标签: sql-like

从两个表中使用 like 运算符查询 SQL

如何使用like来自两个不同表的运算符执行 SQL 查询?

我需要类似的东西:

select * from table1 where name like %table2.name
Run Code Online (Sandbox Code Playgroud)

它不是一个公共字段,而是另一个表上一个字段的子字符串。

sql sql-server sql-like

5
推荐指数
1
解决办法
3万
查看次数

带有包含未转义通配符“%”(百分比)或“_”(下划线)的转义字符串的 mysql LIKE 语句是否容易受到攻击?

假设我们有以下代码(用于某种搜索或类似):

$stmt = $pdo->prepare("SELECT * FROM users WHERE username LIKE ?");
$stmt->execute(array('%' . $username . '%'));
Run Code Online (Sandbox Code Playgroud)

提供的用户名已正确转义,但字符%(= 0 或更多任意字符)和_(= 恰好 1 个任意字符)被 MySQL 解释为通配符。

我知道用户可以输入%或 the_进行搜索,如果我希望搜索功能正常工作,我应该转义它。(在类似的情况下set_pt并获得setopt结果)。

但我的问题是:有人可以利用这个吗?如果是,那么有人会如何利用这一点以及如何防止它?下面的功能够用吗?

function escape_like_string($str) {
  return str_replace(Array('%', '_'), Array('\%', '\_'), $str);
}
Run Code Online (Sandbox Code Playgroud)

我能想到的一种可能性是输入大量的%,因此服务器需要分配大量内存。这行得通吗?

php mysql escaping wildcard sql-like

5
推荐指数
1
解决办法
1384
查看次数

mysql 喜欢匹配字符串上的完整单词或单词开头

给定一个搜索字符串,我需要选择每条记录(在执行搜索的字段中)至少有一个以给定文本开头的单词。

例如:

'John Doe'
Run Code Online (Sandbox Code Playgroud)

必须使用搜索字符串进行选择,例如:

'joh'
'do'
'JOHN doe'
Run Code Online (Sandbox Code Playgroud)

不必选择

'ohn'
'oe'
Run Code Online (Sandbox Code Playgroud)

我需要(可能)避免全文搜索。

我发现有效的是

$query = 'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE "' . $searchText . '%"'
                                . 'OR SEARCHFIELD LIKE "% ' . $searchText . '%"'
Run Code Online (Sandbox Code Playgroud)

我想问是否有更好的方法来做到这一点。

(对于“更好的方式”,我的意思是更好的性能相同的性能但更优雅

另外,由于查询将使用准备好的语句构建,因此我应该如何对搜索字符串中的LIKE元字符进行转义?

mysql sql-like

5
推荐指数
1
解决办法
3万
查看次数

对 SQL 子查询的结果使用“LIKE”

以下查询对我来说非常好:

SELECT * From Customers
WHERE Customers.ContactName = (SELECT FirstName
                               FROM Employees as E, orders as O
                               WHERE <condition>
                               LIMIT 1);
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用LIKE而不是=与子查询的结果进行比较,则不会得到任何结果。如何LIKE '%%'在上述查询中使用?

mysql sql subquery sql-like

5
推荐指数
1
解决办法
1万
查看次数

在 PHP 和 MYSQL 中对搜索完整标题及其单词进行单个查询?

我想根据整个标题名称和标题词搜索产品。可以LIKE使用UNION. 我的数据库title(charchar(550)) = Colorzone Men's Casual Wear Red Cotton Shirt不是全文—— PHP 和 MYSQL 的最佳搜索算法是什么?

但是我需要将搜索结果(第一Cotton Shirt记录,第二 Cotton记录和第三Shirt记录。不应显示混合的所有记录)作为单个查询

MYSQL 查询:例如:标题 =Cotton Shirt

SELECT title FROM zapstore_ecom_products WHERE title LIKE '%Cotton Shirt%' //Get Whole Title products.
UNION
SELECT title FROM zapstore_ecom_products WHERE title LIKE '%Cotton%' //Get list for first word Title products.
UNION
SELECT title FROM zapstore_ecom_products WHERE title LIKE '%Shirt%' //Get …
Run Code Online (Sandbox Code Playgroud)

php mysql search sql-like

5
推荐指数
1
解决办法
830
查看次数

如何在sql的where子句中使用like和substring

希望有人可以帮助我并为我解释这个查询,为什么第一个查询返回结果但第二个没有:

编辑:第一个查询:

select name from Items where name like '%abc%'
Run Code Online (Sandbox Code Playgroud)

第二个查询:

 select name from Items where name like substring('''%abc%''',1,10)
Run Code Online (Sandbox Code Playgroud)

为什么第一个返回结果但第二个什么都不返回

substring('''%abc%''',1,10)='%abc%'
Run Code Online (Sandbox Code Playgroud)

如果这背后有逻辑,是否有另一种方法来做第二个查询之类的事情,

我的 porpuse 是将像 '''abc''' 这样的字符串转换为 'abc' 以便使用 like 语句,

t-sql string substring where-clause sql-like

5
推荐指数
1
解决办法
4万
查看次数

JSONB ILIKE 索引

我有一个peoplebody列为jsonb类型的表。

                                        Table "public.people"
     Column      |            Type             | Collation | Nullable |      Default       | Storage  | Stats target | Description
-----------------+-----------------------------+-----------+----------+--------------------+----------+--------------+-------------
 id              | uuid                        |           | not null | uuid_generate_v4() | plain    |              |
 body            | jsonb                       |           | not null |                    | extended |              |

Indexes:
    "people_pkey" PRIMARY KEY, btree (id)
    "idx_name" gin ((body ->> 'name'::text) gin_trgm_ops)
Run Code Online (Sandbox Code Playgroud)

我的索引如下所示:

CREATE INDEX idx_name ON people USING gin ((body ->> 'name') gin_trgm_ops);
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:

EXPLAIN ANALYZE SELECT * …
Run Code Online (Sandbox Code Playgroud)

sql postgresql json full-text-search sql-like

5
推荐指数
1
解决办法
2154
查看次数

如何在 Presto 中搜索 varchar 字段数组中的文本?

字段被定义为array(varchar)模式分析。

我想搜索字段包含特定文本模式的记录,说道'ABCD'

如果我运行这个 SQL:

select * from data_table 
where top_results like '%ABCD%'
Run Code Online (Sandbox Code Playgroud)

它抛出这个错误:

查询失败 (#20190730_021145_23663_dn9fj):第 2:7 行:LIKE 表达式的左侧必须计算为 varchar(实际:array(varchar)

检测某个字符串是否存在的正确语法是什么?

sql arrays presto sql-like

5
推荐指数
1
解决办法
1万
查看次数

通配符搜索数字范围

我正在尝试过滤掉包含客户互联网计划的列 (plan_name)。例如(200GB 快速无限、免费附加邮箱、无限 VDSL...)。我特别想过滤掉没有任何数字的计划。该列的类型为 varchar2,我正在查询 Oracle 数据库。我编写了以下代码:

SELECT *
FROM   plans
WHERE  plan_name NOT LIKE '%[0-9]%'
Run Code Online (Sandbox Code Playgroud)

但是,此代码仍会快速返回 200GB 之类的计划,其中包含数字?谁能解释这是为什么?

regex sql oracle where-clause sql-like

5
推荐指数
1
解决办法
93
查看次数

PostgreSQL:所有文本列中的 ILIKE

是否有一种简单的临时方式来ILIKE对表的所有文本列执行查询?

我知道有一个包含“foobar”的单元格。但是该表有很多列并且只有 50k 行,因此搜索所有列和行应该很快。

sql postgresql sql-like

5
推荐指数
1
解决办法
106
查看次数