mysql 如何选择具有撇号容器的记录,这些容器使用相同的单词但没有撇号单词?

jrcvhitl  于 2023-02-15  发布在  Mysql
关注(0)|答案(3)|浏览(129)

如何选择具有撇号容器的记录,这些容器使用相同的单词但没有撇号单词?

+----+------------------------------------------+-------+
| id | name                                     | price |
+----+------------------------------------------+-------+
|  1 | World's Best Inspirational Books         | 199   |
|  2 | Ben Martin Men's Slim                    | 98    |
|  3 | Harry Potter and the Philosopher's Stone | 79    |
|  4 | Today's life                             | 690   |
|  5 | Life's Amazing Secrets                   | 99    |
+----+------------------------------------------+-------+
$search = "worlds";

SELECT * FROM product WHERE name LIKE "%$search%";

我需要$search = "world's";的结果

+----+------------------------------------+-------+
| id | name                               | price |
+----+------------------------------------+-------+
|  1 | World's Best Inspirational Books   | 199   |
+----+------------------------------------+-------+

但我得到了这个Empty set (0.001 sec)
我怎样才能使用'worlds搜索world's(撇号)单词(不包括撇号)?

fdbelqdn

fdbelqdn1#

我不知道这在mysql中是否有效,但在sql server中可以这样做

declare @test table (name varchar(50))
insert into @test values ('World''s Best Inspirational Books'), 
                         ('Ben Martin Men''s Slim'),
                         ('Harry Potter and the Philosopher''s Stone'),
                         ('Today''s life'),
                         ('Life''s Amazing Secrets')

select * 
from   @test t
where  t.name like '%world_s%'

并且它将返回第一行。
因此,如果您不想在搜索中添加额外的',也许可以将所有'替换为_

qojgxg4l

qojgxg4l2#

您可以通过执行以下操作来避开撇号:

World''s

在程序中,一种“肮脏”的修复方法是在调用查询之前,向参数中的所有示例添加一个附加的撇号(')。

yks3o0rb

yks3o0rb3#

如果你想知道如何用另一种方法来搜索一个包含撇号但不知道在哪里的值,例如:假设您有本地篮球队名称的列表:
| 团队名称|团队总积分|
| - ------|- ------|
| 本的粉碎机|一百一十|
| 汤米·巴勒斯|九十四|

select * from basketball_teams where TeamName like "%Bens Crushers%"

它会返回一个空集合。但是如果你运行

select * from basketball_teams where TeamName like "%Ben's Crushers%"

它会返回正确的细节。问题是,如果你不知道撇号属于哪里,除非你手动检查每一个条目,否则搜索是不可能的。

    • 解决方案**
select * from basketball_teams where REPLACE(TeamName, "'", "") like "%Bens Crushers%";

返回正确的数据。

相关问题