2015-05-06 144 views
-2

我在我的数据库中有foo关键字。但现在我想寻找这样MySQL查询:像%功能一样搜索关键字

Select id from table where name like '%foo function%' 

数据表这样

----------------- 
|id |name | 
----------------- 
|1 |foo | 
|2 |sourc | 
-------------- 

现在我想“富功能”的字符串,有“富”比赛进行到数据库“富”的结果,请告诉我怎么做。

+9

实际上很难理解你在问什么。你可以请添加一些示例表格数据和预期结果。 – jarlh

+0

请检查我添加它。 –

回答

2

胡乱猜测,但也许你想相反,如:

Select id from table where 'foo function' like '%' || name || '%' 

||是ANSI SQL级联。一些dbms改为concat('%', name, '%'),或者'%' + name + '%'

0

我能理解的是,即使你输入“foo function”,你也应该得到foo的结果。 如果这是你必须把它写像(在MySQL)

name1=foo 
name2=function 

Select id from table where name like (concat('%',name1,'%') or  
concat('%',name2,'%')); 

否则你将不得不implemet搜索引擎喜欢的Solr它为您提供了模糊搜索等功能

你正在寻找那什么
0

试试这个

功能

CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20)) 
    RETURNS @Strings TABLE 
    ( 
     position int IDENTITY PRIMARY KEY, 
     value varchar(8000) 
    ) 
    AS 
    BEGIN 

    DECLARE @index int 
    SET @index = -1 

    WHILE (LEN(@text) > 0) 
     BEGIN 
     SET @index = CHARINDEX(@delimiter , @text) 
     IF (@index = 0) AND (LEN(@text) > 0) 
      BEGIN 
      INSERT INTO @Strings VALUES (@text) 
       BREAK 
      END 
     IF (@index > 1) 
      BEGIN 
      INSERT INTO @Strings VALUES (LEFT(@text, @index - 1)) 
      SET @text = RIGHT(@text, (LEN(@text) - @index)) 
      END 
     ELSE 
      SET @text = RIGHT(@text, (LEN(@text) - @index)) 
     END 
     RETURN 
    END 

查询

Select id from table inner join (select value from fn_split('foo function',' ')) 
as split_table on table.name like '%'+split_table.value+'%';