2012-12-13 7 views
0
Sample items in table1 

table1.productname 
Moshi Monsters 7-in-1 Accessory Pack - Poppet 
Mario vs. Donkey Kong Mini-Land Mayhem! 

나는 replace '-. ! ' 모든, 나는 PRODUCTNAME에서 여러 문자가 예 등을 교체해야 productname하지만 커서를 사용하지 않고 열의 다른 문자를 어떻게 바꿀 수 있습니까?

select case 
     when CHARINDEX ('-',[productname])>0 then REPLACE (ProductName ,'-',' ') 
     when CHARINDEX ('!',[productname])>0 then REPLACE (ProductName ,'!','') 
     when CHARINDEX ('.',[productname])>0 then REPLACE (ProductName ,'.','') 
     else productname 
     end as productname 
    from table1 

내가이의 솔루션에 대한 접근해야하는 방법 만 -

output 

Moshi Monsters 7 in 1 Accessory Pack Poppet 
Mario vs. Donkey Kong Mini-Land Mayhem 

expected output 
Moshi Monsters 7 in 1 Accessory Pack Poppet 
Mario vs Donkey Kong MiniLand Mayhem 

을 대체 할 것으로 보인다 사용하여 점점 그 기둥은 약 5K 큽니다. 실제로 변경된 이름으로 table1을 업데이트하려고했지만 어떤 것이 변경되었는지 그리고 어떻게 업데이트 하는지를보고 싶었습니다. 이런 종류의 replace 성명으로 모든 요구 사항이 충족되지 않는 것 같습니다. 업데이트에서 여러 번 반복 할 수 있지만 업데이트에서 반복을 사용하는 방법을 알지 못합니다. 어떻게 처리해야합니까?

+1

CASE 문은 WHEN/ELSE 절 중 하나, 즉 적용되는 첫 번째 절만을 수행합니다. 샘플에서는 제품 이름에 '-'문자가 있기 때문에 CASE는 해당 WHEN 절을 수행 한 다음 중지합니다. '-'가 없으면 '!'가 있는지 확인하고 '!'가없는 경우에만 확인합니다. 그것은 '.'을 확인할 것입니다. – Hellion

+0

@Hellion 감사합니다. 그렇다면 올바르게 사용해야하는 문장에서'CASE'를 제거하면됩니다. 맞습니까? 나는 지금 그것을 시험해 볼 것이다. 마크 B가 말한 것과 같습니다. – tough

답변

3

문자열 바꾸기에 항상 같은 소스를 사용하고 있습니다. 원래는 ProductName 필드는 변경되지 않습니다. 교체 할 체인을 연결해야합니다.

REPLACE(REPLACE(REPLACE(ProductName, '.', ''), '!', ''), '-', '') 

매우 못 생겨 추악합니다. 당신은 당신의 클라이언트에서 이것을하는 것이 더 나을 것입니다.

+0

감사합니다. 빠르고 쉽지만 더러워 보입니다. 내가 찾고 있었던 것입니다. – tough

관련 문제