【问题标题】:how do I search substring in database?如何在数据库中搜索子字符串?
【发布时间】:2014-07-28 15:33:47
【问题描述】:

我的数据库表中有两列:

-------------------------------
name            | address
-------------------------------
raj kumar       | park street    
yogin patel     | ghari chowk 
raju singh      | sultan ganj

我想检索包含sultan ganj 的行,但我错误地搜索了sultanganj(单词之间没有空格)。为了得到正确的结果,我将使用什么查询?

【问题讨论】:

  • 在where 子句中组合replace 和like。示例:select * from table_name where replace( address, ' ', '' ) like '%sultanganj%';
  • 如果您正在执行某种搜索功能,请查看 Levenshtein 距离
  • MySQL 不包含 Levenshtein 函数,但这里列出了一个实现:stackoverflow.com/questions/13909885/… 这更好,恕我直言,涉及替换空格的答案将有助于解决更一般的拼写错误。

标签: mysql sql


【解决方案1】:

您可以将REPLACE字段address中的所有空格用空字符串与sultanganj进行比较:

SELECT * 
FROM `table`
WHERE REPLACE(`address`, ' ', '') = 'sultanganj'

这将返回您:

-------------------------
    name   |   address
-------------------------
raju singh | sultan ganj

【讨论】:

  • 感谢您的回答,但还有一个问题假设我搜索了 parkroad(单词之间没有空格)并且我的数据库中没有这样的单词,但我仍然想收到包含 park 或 road 的行或两者兼而有之。那么我将使用哪个查询?请回答
【解决方案2】:

只需像下面那样使用REPLACE函数来替换值中的多余空格

select name, address
from yourtable
where replace(address,' ','') = 'sultanganj'

编辑:

您可以在回答中使用相同的查询,只是将WHERE 条件更改为类似于“%park%”之类的地址或“%road%”之类的地址。这样,它将匹配包含单词park 或road 或both 的所有地址(例如:parkroad、parkstreet、HellRoad、Heavenpark 等)。

select name, address
from yourtable
where address like '%park%' or address like '%road%'

【讨论】:

  • 感谢您的回答,但还有一个问题假设我搜索了 parkroad(单词之间没有空格)并且我的数据库中没有这样的单词,但我仍然想收到包含 park 或道路或两者兼而有之。那么我将使用哪个查询?请回答
  • @user3717804,除了将WHERE 条件更改为where address like '%park%' or address like '%road%' 之外,您可以在回答中使用相同的查询。
  • 您使用哪个查询将单个单词(parkroad)分成两个单词(park,road)?
【解决方案3】:

下面的查询会帮助你

select * from table1 Where replace(address,' ','') = replace('sultanganj',' ','')

【讨论】:

  • 感谢您的回答,但还有一个问题假设我搜索了 parkroad(单词之间没有空格)并且我的数据库中没有这样的单词,但我仍然想收到包含 park 或道路或两者兼而有之。那么我将使用哪个查询?请回答
【解决方案4】:
SELECT * FROM table where replace(`address`,' ', '' ) like '%your search element%' or `address` like '%your search element%'

这个查询对我有用

编辑

(1)SELECT * FROM table where replace(`address`,' ', '' ) like '%parkstreet%' or `address` like '%parkstreet%'
(2)SELECT * FROM table where replace(`address`,' ', '' ) like '%park%' or `address` like '%park%'
(3)SELECT * FROM table where replace(`address`,' ', '' ) like '%street%' or `address` like '%street%'
(4)SELECT * FROM table where replace(`address`,' ', '' ) like '%park street%' or `address` like '%park street%'

【讨论】:

  • 感谢您的回答,但还有一个问题假设我搜索了 parkroad(单词之间没有空格)并且我的数据库中没有这样的单词,但我仍然想收到包含 park 或道路或两者兼而有之。那么我将使用哪个查询?请回答
  • @user3717804 您可以在此答案中使用相同的查询
  • @user3717804 我编辑了答案,并检查了搜索元素“park”、“road”、“parkroad”和“park road”的查询,它对我有用..
  • 告诉我查询你是如何将parkroad这个词分解成park,road
  • 好的,基本上我认为你没有得到我的问题,所以让我为你澄清一下。所以我正在搜索“parkroad”,如果你在我的数据库中看到上面没有这样的词,但有“公园街”。所以我想要的是接收包含公园或道路的行,而不是没有结果。我不会一次又一次地输入。我已经输入了一次“parkstreet”。所以现在你给出查询如何将 parkstreet 分成两个词 park,street
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多