Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Usuń znaki rozszerzone ASCII od 128 (SQL)

Połączone rozwiązanie wykorzystuje pętlę, która jest - jeśli to możliwe - czymś, czego powinieneś unikać.

Moje rozwiązanie jest całkowicie nieliniowe, łatwo jest z tego utworzyć UDF (a może nawet lepiej:wbudowany TVF).

Pomysł:Utwórz zestaw liczb bieżących (tutaj jest to ograniczone liczbą obiektów w sys.objects, ale jest mnóstwo przykładów, jak tworzyć liczby w locie). W drugim CTE ciągi są dzielone na pojedyncze znaki. Ostateczny wybór powraca z oczyszczonym ciągiem.

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

Wynik

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

Oto kolejna odpowiedź ode mnie, gdzie to podejście jest używane do zastępowania wszystkich specjalnych znaki z bezpiecznym znaki, aby uzyskać zwykłą łacinę




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj liczbę nieudanych prób logowania dla logowania z powodu nieprawidłowego hasła w programie SQL Server (T-SQL)

  2. Jak zapobiec aktualizacjom tabeli, z wyjątkiem jednej sytuacji

  3. Jak korzystać z wyszukiwania semantycznego w SQL Server

  4. Jak połączyć się z domyślną instancją programu SQL Server i nazwanymi wystąpieniami programu SQL Server — samouczek programu SQL Server/TSQL — część 2

  5. Wstaw do... Scal... Wybierz (SQL Server)