如何在SQL中的条件中使用替换函数

时间:2014-02-04 20:24:00

标签: sql sql-server

我的商店程序的where子句中有条件。我想在@LastName和@FirstName之后应用替换函数

这是我的代码

   AND IN2.LNameTxt LIKE CASE WHEN @LastName IS NOT NULL THEN (@LastName) ELSE IN2.LNameTxt END
   AND IN2.FNameTxt LIKE CASE WHEN @FirstName IS NOT NULL THEN @FirstName ELSE IN2.FNameTxt END

我想要@LastName或@ LastName.Replace(“''”,“”)之后有任何建议我怎么能这样做。

3 个答案:

答案 0 :(得分:0)

不确定以下内容是否符合您的所有要求,但它应该有所帮助:

Declare @LastName varchar(20) = '''''Smith'
/* Use the statement below as a test of replacing the variable 
Select REPLACE(@LastName, '''''', '')
*/
Select * 
from Your.Data.Source IN2 
where 
    IN2.LNameTxt Like 
        CASE 
            WHEN @LastName Is NOT Null THEN Replace(@LastName, '''''', '') 
            Else IN2.LNameTxt --Not sure why you want this here?
        End

答案 1 :(得分:0)

使用COALESCE()函数。

我不明白为什么要将字段与自身进行比较作为默认值。

另外,我无法分辨你要替换的角色。我以为这是双引号。

 AND IN2.LNameTxt LIKE REPLACE(COALESCE(@LastName, IN2.LNameTxt, ''), '"', '')
 AND IN2.FNameTxt LIKE REPLACE(COALESCE(@FirstName, IN2.FNameTxt, ''), '"', '')

答案 2 :(得分:0)

请参阅有关SQL Server REPLACE函数的TechNet文章:http://technet.microsoft.com/en-us/library/ms186862.aspx

另外,我认为您想要使用此模式。它应该更有效地运作。

AND 
(
    @LastName IS NULL --if @LastName param is null then do not filter on last name
    OR
    IN2.LNameTxt LIKE REPLACE(@LastName, 'SearchForText', 'ReplaceWithText') 
) 
AND 
(   @FirstName IS NULL --if @FirstName param is null then do not filter on first name
    OR
    IN2.FNameTxt LIKE REPLACE(@FirstName, 'SearchForText', 'ReplaceWithText') 
)