2014-12-24 35 views
2

我搞砸了,並允許用戶創建公司名稱,他們正在創建這樣的公司名稱:湯姆&馬克冰淇淋店。如何更新或從varchar列中刪除所有特殊字符

問題是,公司名稱有一個鏈接,讓其他人點擊查看公司的個人資料,而.net正在拋出一個錯誤,指出不允許有危險的字符。

我並不擔心用公司名稱來精確定位用戶可以在每次注意到'&'消失時更新自己。

如何使用SQL語法更新SQL中的列,以將所有特殊字符刪除並在特殊字符的位置添加空格?

有沒有辦法在sql中識別列值中是否有特殊字符?

UPDATE [BuildingPros].[utbProfessionals] 
    SET [ProfessionalName] = Replace([ProfessionalName],'some character',' ') 
WHERE ProfessionalName =ProfessionalName 
+4

我會解決的基本*危險字符不允許*問題(你應說明這一點),而不是改變。數據。如果處理正確,您應該不會遇到問題 –

+1

我會在用戶第一次創建公司名稱和更新其名稱的區域發表該聲明,但現在,我需要修正噓聲。 –

+1

@ AlexK。的觀點是數據庫應該允許用戶想要的任何字符。當您從數據庫中讀取數值時,應該對軟件中的任何「壞字符」進行過濾。 – dg99

回答

2

這是查找字符串的示例代碼是否包含特殊字符。你可以試試這個

DECLARE @MyString VARCHAR(100) 
SET @MyString = 'abcdef&&&&ybyds' 

IF (@MyString LIKE '%[^a-zA-Z0-9]%') 
    BEGIN 
     SET @MyString = Replace(@MyString,'&',' ') 
     PRINT 'Contains "special" characters' 
     PRINT @MyString 
    END 
ELSE 
    BEGIN 
     PRINT 'Does not contain "special" characters' 
     PRINT @MyString 
    END 

而且你的UPDATE查詢將是這樣的: -

UPDATE [BuildingPros].[utbProfessionals] 
SET [ProfessionalName] = 
         (
         CASE 
          WHEN [ProfessionalName] LIKE '%[^a-zA-Z0-9]%' 
            THEN Replace(REPLACE(ProfessionalName, SUBSTRING(ProfessionalName, PATINDEX('%[~,@,#,$,%,&,*,^,&,%,*,(,)]%', ProfessionalName), 1),''),'-',' ') 
          ELSE [ProfessionalName] 
          END 
         ) 

,或者可以創建一個函數來刪除特殊字符函數然後調用它在Update語句。

1)從字符串值中移除特殊字符。 2)除0-9,a-z和A-Z以外的所有字符被刪除,並且3)其餘字符被返回。

create function dbo.RemoveSpecialChars (@s varchar(256)) returns varchar(256) 
     with schemabinding 
    begin 
     if @s is null 
      return null 
     declare @s2 varchar(256) 
     set @s2 = '' 
     declare @l int 
     set @l = len(@s) 
     declare @p int 
     set @p = 1 
     while @p <= @l begin 
      declare @c int 
      set @c = ascii(substring(@s, @p, 1)) 
      if @c between 48 and 57 or @c between 65 and 90 or @c between 97 and 122 
      set @s2 = @s2 + char(@c) 
      set @p = @p + 1 
      end 
     if len(@s2) = 0 
      return null 
     return @s2 
     end 

然後調用這個函數在更新語句: -

UPDATE [BuildingPros].[utbProfessionals] 
SET [ProfessionalName] = 
        (
        CASE 
         WHEN [ProfessionalName] LIKE '%[^a-zA-Z0-9]%' 
          THEN (SELECT dbo.RemoveSpecialChars(ProfessionalName)) 
         ELSE [ProfessionalName] 
         END 
        ) 

Refer

+0

這隻適用於'&',我需要它用於任何特殊字符。 –

+0

看到修改後的答案,你可以在這裏包含任何特殊的字符 – HaveNoDisplayName

相關問題