2017-08-25 14 views
0

Microsoft SQL Serverの特定の列からスペースを除くすべての特殊文字と数字を削除するにはどうすればよいですか?列から特殊文字と数字を削除する

+0

"_special character_"を定義してください。数字は0〜9か、またはUnicodeが数字として分類しているものは何ですか? – Arminius

+0

azからの文字のみが – baraka

+0

である必要があります。SQL Server内で実行する必要がある場合は、https://stackoverflow.com/questions/21378193/regex-pattern-inside-sql-replace-functionを参照してください。これは、 ... カラムのデータをエクスポート、クリーニング、再インポートすることで、入力データの検証と既存データのクリーンアップをお勧めします。 – Arminius

答えて

0

上記のリンクはすべてこれを解決するためにループを使用しています。この種のもののためのループに頼る必要はありません。代わりに、集計表を使用することができます。このようなシステムでは、集計表をビューとして保持します。

create View [dbo].[cteTally] as 

WITH 
    E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)), 
    E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows 
    E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max 
    cteTally(N) AS 
    (
     SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4 
    ) 
select N from cteTally 
GO 

ここで、その集計をセットとして活用できます。これは、ループベースのソリューションよりもはるかに高速です。

create function GetOnlyCharacters 
(
    @SearchVal varchar(8000) 
) returns table as return 

    with MyValues as 
    (
     select substring(@SearchVal, N, 1) as number 
      , t.N 
     from cteTally t 
     where N <= len(@SearchVal) 
      and substring(@SearchVal, N, 1) like '[a-z]' 
    ) 

    select distinct NumValue = STUFF((select number + '' 
       from MyValues mv2 
       order by mv2.N 
       for xml path('')), 1, 0, '') 
    from MyValues mv 
関連する問題