将缩写视为Sta。等于圣诞老人,或马。等于玛丽亚或马。
SELECT * FROM Table1 A WITH(NOLOCK) WHERE A.Name LIKE '%ma%'
此查询适用于Maria,但问题是它还包含名称包含marie
案例1:用户输入ma
结果为maria
,ma
和ma.
,反之亦然。
案例2:用户输入Maria
输出为Ma. Teresa
或Maria Teresa
或Ma Teresa
,sta
方案也是如此。
案例3:用户输入sta
结果为santa
,sta.
和sta
,反之亦然。
案例4:用户输入普通名称(Jose)没有缩写,结果就像Jose
对这个问题有什么看法吗?或者这个问题的最佳方法是什么?
谢谢。
答案 0 :(得分:1)
你有缩写的句号,所以这可能会做你想要的:
WHERE ' ' + A.Name + ' ' LIKE '% Ma. %'
答案 1 :(得分:0)
这是检查搜索是否包含ma
,ma.
....
CREATE FUNCTION [dbo].[StringContains]
(
-- Add the parameters for the function here
@String1 VARCHAR(MAX),
@String2 VARCHAR(MAX)
)
RETURNS BIT
AS
BEGIN
-- Declare the return variable here
DECLARE @Result BIT = 0
DECLARE @IsContain INT = 0
DECLARE @Equivalents TABLE
(
ID INT IDENTITY(1,1),
Text1 VARCHAR(50),
Text2 VARCHAR(50)
)
INSERT INTO @Equivalents (Text1, Text2)
VALUES ('ma. ','maria'),
('ma. ','ma '),
('ma ','maria'),
('sta. ','santa'),
('sta. ','sta '),
('sta ','santa')
DECLARE @ID INT = 1
DECLARE @TOTAL INT = (SELECT COUNT(1) FROM @Equivalents)
WHILE @ID <= @TOTAL
BEGIN
DECLARE
@Temp1 VARCHAR(MAX) = @String1,
@Temp2 VARCHAR(MAX) = @String2,
@Text1 VARCHAR(50),
@Text2 VARCHAR(50)
SELECT TOP 1
@Text1 = Text1,
@Text2 = Text2
FROM @Equivalents
WHERE ID = @ID
IF @Temp1 LIKE '%'+@Text1+'%' AND @Temp2 LIKE '%'+@Text2+'%'
BEGIN
SET @String2 = REPLACE(@Temp2,@Text2,@Text1)
END
ELSE IF @Temp1 LIKE '%'+@Text2+'%' AND @Temp2 LIKE '%'+@Text1+'%'
BEGIN
SET @String2 = REPLACE(@Temp2,@Text1,@Text2)
END
IF @String1 LIKE '%'+@String2+'%'
BEGIN
SET @IsContain += 1
END
SET @ID += 1
END
SET @Result = (CASE WHEN @IsContain > 0 THEN 1 ELSE 0 END)
RETURN @Result
END
这是查询。
DECLARE @Text VARCHAR(MAX) = 'maria'
SELECT TOP 100 FullName,* FROM dbo.Table1 WITH(NOLOCK)
WHERE dbo.StringContains(FullName,@Text) = 1