答案 0 :(得分:1)
似乎每个案例都不同,所以我认为你只能使用类似的语法来压缩/优化代码:
DECLARE @Name VARCHAR(max) = 'John'
DECLARE @NameCondition VARCHAR(10) = 'Exact'
DECLARE @Phonetic INT = 1
DECLARE @WhereCondition VARCHAR(MAX) = 'WHERE '
IF @Name <> ''
BEGIN
DECLARE @Test AS INTEGER
SELECT @Test = LEN(@Name) - LEN(REPLACE(@Name,',','')) + 1
IF @Phonetic = 0
BEGIN
IF @Test = 1
BEGIN
IF @NameCondition = 'Exact' SET @WhereCondition += ' FirstName = '''+@Name+''''
ELSE IF @NameCondition = 'Containing' SET @WhereCondition += ' FirstName LIKE ''%'+@Name+'%'' AND'
ELSE IF @NameCondition = 'Start with' SET @WhereCondition += ' FirstName LIKE '''+@Name+'%'' AND'
ELSE IF @NameCondition = 'End with' SET @WhereCondition += ' FirstName LIKE ''%'+@Name+''' OR'
END
ELSE IF @Test > 1
BEGIN
-- every case of @NameCondition with @Phonetic = 0 and @Test > 1
END
END
ELSE IF @Phonetic = 1
BEGIN
IF @Test = 1
BEGIN
-- every case of @NameCondition with @Phonetic = 1 and @Test = 1
END
ELSE IF @Test > 1
BEGIN
-- every case of @NameCondition with @Phonetic = 1 and @Test > 1
END
END
END
答案 1 :(得分:1)
以下是完整资料来源:
DECLARE @Name VARCHAR(max) = 'John'
DECLARE @NameCondition VARCHAR(10) = 'Exact'
DECLARE @Phonetic INT = 1
DECLARE @WhereCondition VARCHAR(MAX) = 'WHERE '
IF @Name <> ''
BEGIN
IF @Phonetic = 0
BEGIN
IF (LEN(@Name) - LEN(REPLACE(@Name,',','')) + 1) = 1
BEGIN
IF @NameCondition = 'Exact'
SET @WhereCondition += ' FirstName = '''+@Name+'''';
ELSE IF @NameCondition = 'Containing'
SET @WhereCondition += ' FirstName LIKE ''%'+@Name+'%'' AND';
ELSE IF @NameCondition = 'Start with'
SET @WhereCondition += ' FirstName LIKE '''+@Name+'%'' AND';
ELSE IF @NameCondition = 'End with'
SET @WhereCondition += ' FirstName LIKE ''%'+@Name+''' OR';
END
ELSE IF (LEN(@Name) - LEN(REPLACE(@Name,',','')) + 1) > 1
BEGIN
IF @NameCondition = 'Exact'
SET @WhereCondition += ' FirstName IN('''+REPLACE(@Name,',',''',''')+''') AND';
ELSE IF @NameCondition = 'Containing'
SET @WhereCondition += ' FirstName LIKE '''+REPLACE(@Name,',','%'' OR FirstName LIKE ''')+'%'' AND';
ELSE IF @NameCondition = 'Start with'
SET @WhereCondition += ' FirstName LIKE '''+REPLACE(@Name,',','%'' OR FirstName LIKE ''')+'%'' AND';
ELSE IF @NameCondition = 'End with'
SET @WhereCondition += ' FirstName LIKE ''%'+REPLACE(@Name,',',''' OR FirstName LIKE ''%')+''' AND';
END
END
ELSE IF @Phonetic = 1
BEGIN
IF (LEN(@Name) - LEN(REPLACE(@Name,',','')) + 1) = 1
BEGIN
IF @NameCondition = 'Exact'
SET @WhereCondition += ' SOUNDEX(FirstName) = SOUNDEX('''+@Name+''') AND';
ELSE IF @NameCondition = 'Containing'
SET @WhereCondition += ' SOUNDEX(FirstName) LIKE SOUNDEX(''%'+@Name+'%'') OR';
ELSE IF @NameCondition = 'Start with'
SET @WhereCondition += ' SOUNDEX(FirstName) LIKE SOUNDEX('''+@Name+'%'') AND';
ELSE IF @NameCondition = 'End with'
SET @WhereCondition += ' SOUNDEX(FirstName) LIKE SOUNDEX(''%'+@Name+''') AND';
END
ELSE IF (LEN(@Name) - LEN(REPLACE(@Name,',','')) + 1) > 1
BEGIN
IF @NameCondition = 'Exact'
SET @WhereCondition += ' SOUNDEX(FirstName) IN (SOUNDEX('''+REPLACE(@Name,',',''') , SOUNDEX(''')+''')) AND';
ELSE IF @NameCondition = 'Containing'
SET @WhereCondition += ' SOUNDEX(FirstName) LIKE (SOUNDEX(''%'+REPLACE(@Name,',','%'') , SOUNDEX(''%')+'%'')) AND';
ELSE IF @NameCondition = 'Start with'
SET @WhereCondition += ' SOUNDEX(FirstName) LIKE (SOUNDEX('''+REPLACE(@Name,',','%'') , SOUNDEX(''')+'%'')) AND';
ELSE IF @NameCondition = 'End with'
SET @WhereCondition += ' SOUNDEX(FirstName) LIKE (SOUNDEX(''%'+REPLACE(@Name,',',''') , SOUNDEX(''%')+''')) AND';
END
END
END
PRINT(@WhereCondition);