MySQL query : 搜索关键词 like % function
MySQL query : search keyword like % function
我的数据库中有 foo 关键字。但现在我想这样搜索
Select id from table where name like '%foo function%'
这样的数据表
-----------------
|id |name |
-----------------
|1 |foo |
|2 |sourc |
--------------
现在我想要 "foo function" 与数据库 "foo" 匹配的字符串 "foo" 结果请告诉我该怎么做。
胡乱猜测,但也许您想要相反的 LIKE:
Select id from table where 'foo function' like '%' || name || '%'
||
是 ANSI SQL 连接。有些 dbms 有 concat('%', name, '%')
,或者 '%' + name + '%'
.
我能理解的是,即使您键入 "foo function",您也应该得到 foo 结果。
如果那是你要找的东西,那么你必须这样写(in mysql)
name1=foo
name2=function
Select id from table where name like (concat('%',name1,'%') or
concat('%',name2,'%'));
否则你将不得不实现像 solr 这样的搜索引擎,它为你提供模糊搜索和其他功能
试试这个
函数
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+'%';
我的数据库中有 foo 关键字。但现在我想这样搜索
Select id from table where name like '%foo function%'
这样的数据表
-----------------
|id |name |
-----------------
|1 |foo |
|2 |sourc |
--------------
现在我想要 "foo function" 与数据库 "foo" 匹配的字符串 "foo" 结果请告诉我该怎么做。
胡乱猜测,但也许您想要相反的 LIKE:
Select id from table where 'foo function' like '%' || name || '%'
||
是 ANSI SQL 连接。有些 dbms 有 concat('%', name, '%')
,或者 '%' + name + '%'
.
我能理解的是,即使您键入 "foo function",您也应该得到 foo 结果。 如果那是你要找的东西,那么你必须这样写(in mysql)
name1=foo
name2=function
Select id from table where name like (concat('%',name1,'%') or
concat('%',name2,'%'));
否则你将不得不实现像 solr 这样的搜索引擎,它为你提供模糊搜索和其他功能
试试这个
函数
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+'%';