2017-12-07 1 views
2

当社の環境でデータを選択するためのスクリプトを作成した状況があります。そのようにして、私はあるケースでパターンマッチングと文字のストリッピングに関数を使うことにしました。CASE WHENの機能を削除するのに手助けが必要

しかし、私たちのクライアントの1人は私たちのローカル環境にデータを入れさせたくないので、私は自分の環境で実行できるようにスクリプトをマッサージする必要があります。機能を削除して、私はそれをするために何かを動かす必要があるかについて考えるのが苦労しています。

関数呼び出しの例は次のようになります

Prpデータ入力ためプロパティタイプを含み、 SerialNumberシリアル番号を含む列である列だけでなく、他のいくつかのランダムなガベージある
SELECT .... 
CASE WHEN Prp = 'Key Cabinet' 
     AND SerialNumber IS NOT NULL 
     AND dbo.fnRemoveNonNumericCharacters(SerialNumber) <> '' 
    THEN dbo.fnRemoveNonNumericCharacters(SerialNumber) 
.... 
INTO #EmpProperty 
FROM .... 

お粗末だった。

関数の定義は次のとおりです。

@strTextは私が渡してい SerialNumberある
WHILE PATINDEX('%[^0-9]%', @strText) > 0 
BEGIN 
    SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '') 
END 
RETURN @strText 

私はちょうど行うには良い方法を把握することはできませんので、私は分析麻痺で立ち往生することができますこの。私はソリューションごとに完全に言う必要はありません、おそらくちょうどあなたが知っている方向に私を指して動作することを知っている。いくつかのサンプルDDL/DMLが何かを混乱させたいのであれば教えてください。

例 'SerialNumber'の値は、CA100 (Trash bins),T110,101Bです。 また、すべてのテキストやすべての数値など、他の種類の値もありますが、それらをフィルタリングしています。現在のパターニングマッチングは十分です。

+0

その列に何がありますか?いくつかのデータの例を挙げることができますか? – scsimon

+0

良い@scsimon!私はいくつかを入れた。 –

答えて

2

だから私は多分、そう...あなたは機能を使用することはできません意味だと思う:

declare @table table (SomeCol varchar(4000)) 
insert into @table values 
('1 ab2cdefghijk3lmnopqr4stuvwxyz5 6 [email protected]#$8%^&9*()-10_=11+[]{}12\|;:13></14? 15'), 
('CA100 (Trash bins), T110, 101B') 

;with cte as (
    select top (100) 
    N=row_number() over (order by @@spid) from sys.all_columns), 

Final as (
    select SomeCol, Col 
    from @table 
     cross apply (
      select (select X + '' 
      from (select N, substring(SomeCol, N, 1) X 
        from cte 
        where N<=datalength(SomeCol)) [1] 
      where X between '0' and '9' 
      order by N 
      for xml path('')) 
     ) Z (Col) 
    where Z.Col is not NULL 
) 

select 
    SomeCol 
    ,cast(Col as varchar) CleanCol --change this to BIGINT if it isn't too large 
from Final 
関連する問題