Please make sure to use the '-' as the first or last character within wildcard and it will work.
You can even use the below function to replace any special characters.
CREATE Function [dbo].[ReplaceSpecialCharacters](@Temp VarChar(200))
Returns VarChar(200)
AS
Begin
Declare @KeepValues as varchar(200)
Set @KeepValues = '%[-,~,@,#,$,%,&,*,(,),!,?,.,,,+,\,/,?,`,=,;,:,{,},^,_,|]%'
While PatIndex(@KeepValues, @Temp) > 0
SET @Temp =REPLACE(REPLACE(REPLACE( REPLACE (REPLACE(REPLACE( @Temp, SUBSTRING( @Temp, PATINDEX( @KeepValues, @Temp ), 1 ),'') ,' ',''),Char(10),''),char(13),''),' ',''), ' ','')
Return REPLACE (RTRIM(LTRIM(@Temp)),' ','')
End
I am using in my project and it works fine