2016-03-23 10 views
1

Bir varchar (max) cinsinden genişletilmiş ASCII karakterlerini kaldırmanın basit bir yolu var mı? Tüm ASCII karakterlerini 128'den kaldırmak istiyorum. örn. - ù, ç, ÄASCII Extended Characters 128'i (SQL) kaldırın (SQL)

Bu çözümü denedim ve çalışmıyor, hala geçerli ASCII karakterleri olduklarından bence mi? kaçınılması gereken bir - mümkünse -

How do I remove extended ASCII characters from a string in T-SQL?

Teşekkür

+0

almak için sonuç bu sana olacak mı tetikleme kodunun bir parçası mı? Gelecekte bu değerleri önlemek için? – jarlh

+3

Bağlantılı cevabı kullanın, 'IF UNICODE (@nchar)' ile 32 ile 255 'arasında' IF UNICODE (@nchar) <128 'değerini değiştirin –

+0

Değerler bir sütunda veya bir işlev ya da Güncelleme ifadesi yapacak? – SkipFeeney

cevap

1

bağlantılı bir çözümdür bir döngü kullanıyor.

Çözümüm tamamen çizilemez, bundan bir UDF (veya daha da iyisi: bir satır içi TVF) oluşturmak kolaydır.

Fikir: Bir dizi çalışan sayı yaratın (burada sys.objects'deki nesnelerin sayısıyla sınırlıdır, ancak örnekte tonlarca numara oluşturma yöntemi vardır). İkinci CTE'de dizeler tek karakterlere bölünür. Son seçim temizlenmiş dize ile geri geliyor.

DECLARE @tbl TABLE(ID INT IDENTITY, EvilString NVARCHAR(100)); 
INSERT INTO @tbl(EvilString) VALUES('ËËËËeeeeËËËË'),('ËaËËbËeeeeËËËcË'); 

WITH RunningNumbers AS 
(
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS Nmbr 
    FROM sys.objects 
) 
,SingleChars AS 
(
    SELECT tbl.ID,rn.Nmbr,SUBSTRING(tbl.EvilString,rn.Nmbr,1) AS Chr 
    FROM @tbl AS tbl 
    CROSS APPLY (SELECT TOP(LEN(tbl.EvilString)) Nmbr FROM RunningNumbers) AS rn 
) 
SELECT ID,EvilString 
     ,(
     SELECT '' + Chr 
     FROM SingleChars AS sc 
     WHERE sc.ID=tbl.ID AND ASCII(Chr)<128 
     ORDER BY sc.Nmbr 
     FOR XML PATH('') 
    ) AS GoodString 
FROM @tbl As tbl 

bu yaklaşım güvenli karakterlerle tüm özel karakterleri değiştirmek için kullanılır

benden
1 ËËËËeeeeËËËË eeee 
2 ËaËËbËeeeeËËËcË abeeeec 

Here is another answerdüz latin