我对一些SQL语句有疑问。我搜索一个名字,e.x。 “安妮玛丽帕克”。我将这个搜索查询传递给我的脚本。
该脚本使用以下sql代码:
SELECT * FROM table WHERE name LIKE '%(searchquery)%'
(searchquery)将是我要找的名字。
问题如下。我不仅希望得到Anne Marie Parker,我还希望得到“Anne Parker”的成绩。
有没有可能在我的SQL查询中执行此操作?我可以通过代码来准备它,但我希望它可以在我的SQL查询中完成。
是否有某种功能,例如用“%”替换所有空格,然后由正则表达式解释?
非常感谢你,祝你有愉快的一天!
再见 WorldSignia
答案 0 :(得分:1)
用通配符替换空格在这里不会有用。看起来你真正想要的是在空格上拆分值,并根据结果表创建一个查询。 这是我用来解析分隔字符串的函数:
CREATE FUNCTION [dbo].[fn_Utility_ParseDelimitedString]
(
@String varchar(8000),
@Delimeter varchar(5)
)
RETURNS
@ParsedString TABLE
(
StringVal varchar(2000)
)
AS
BEGIN
declare @pos int
declare @piece varchar(500)
-- Need to tack a delimiter onto the end of the input string if one doesn't exist
if right(rtrim(@string),1) <> @Delimeter
set @string = @string + @Delimeter
set @pos = patindex('%,%' , @string)
while @pos <> 0
begin
set @piece = left(@string, @pos - 1)
-- You have a piece of data, so insert it, print it, do whatever you want to with it.
INSERT INTO @ParsedString VALUES(cast(@piece as varchar(2000)))
set @string = stuff(@string, 1, @pos, '')
set @pos = patindex('%'+ @Delimeter +'%' , @string)
end
RETURN
END
然后你的查询看起来像这样:
select *
from table
inner join fn_utility_parsedelimitedstring(@searchquery,' ') list
on table.name like '%'+list.Stringval+'%'
我认为类似的东西会让你获得更全文的搜索感受。这还没有真正经过测试,所以ymmv
答案 1 :(得分:0)
select
*
from
table
where
name like "%anne marie parker%"
or name like "%ann parker%"
答案 2 :(得分:0)
如果您正在使用MySQL(目前尚不清楚,我只是在猜测),您应该能够这样做:
SELECT * FROM table WHERE name RLIKE REPLACE(searchquery, ' ', '.*')
当然,你必须以你正在查询的任何语言恰当地处理searchquery。它很慢,非常慢。
如果你在MyISAM中使用MySQL,在相关列上创建全文索引,并使用MATCH()会更快,可能更准确:
SELECT * FROM table WHERE MATCH(name) AGAINST (searchquery)
它比RLIKE快,但它可能不是你想要的,如果你不使用MyISAM,你也无法使用它。
答案 3 :(得分:0)
SELECT * FROM table WHERE name LIKE 'Anne%' and name LIKE '%Parker'
答案 4 :(得分:0)
以下是一个简短的解决方案:
SELECT *
FROM table
WHERE name like
Left(@stringval,CharIndex(' ',@stringval))
+ '%'
+ Right(@stringval,CharIndex(' ',Reverse(@stringval)))
如果我对这些职位有点不满意,你将不得不原谅我,但希望这也能解决多个中间人的问题。
答案 5 :(得分:0)
我会这样做。
DECLARE @T VARCHAR(340)
SET @T ='Anne Parker'
SELECT @T = 'SELECT * FROM CUSTOMERS WHERE FULLNAME LIKE ''%' + REPLACE(@T,' ','%') + '%'' ORDER BY FULLNAME'
EXEC (@T);