2017-08-17 84 views
0

我的輸入表是這樣的:刪除字符串 - SQL服務器

PARSED_VALUE2  | PARSED_VALUE4 
---------------------|--------------- 
CHIN  CONTACT  | CHIN  CONTACT 
---------------------|---------------- 
HAMLET/PH   | HAMLET/PH 
----------------------|--------------- 
NameM(    | NameM(
----------------------|---------------- 

我想輸出是這樣的:

 PARSED_VALUE | PARSED_VALUE4 
---------------------|--------------- 
CHIN  CONTACT | CHIN 
---------------------|---------------- 
HAMLET/PH   | HAMLET 
----------------------|--------------- 
NameM(    | NameM 
----------------------|---------------- 

但是,我得到的輸出:

The output I want is like this: 

     PARSED_VALUE | PARSED_VALUE4 
---------------------|--------------- 
CHIN  CONTACT | CHIN 
---------------------|---------------- 
HAMLET/PH   | HAMLET/PH 
----------------------|--------------- 
NameM(    | NameM(
----------------------|---------------- 

這是我寫的代碼:

SELECT * 
     , COALESCE(CASE WHEN PATINDEX('%' + '/' + '%',PARSED_VALUE2) >=1 
         THEN left(PARSED_VALUE2,CHARINDEX('/', PARSED_VALUE2)-1) 
         ELSE PARSED_VALUE2 END --HAMLET/PH 
     , CASE WHEN PATINDEX('%' + 'CONTACT' + '%',PARSED_VALUE2) >=1 
       THEN left(PARSED_VALUE2,CHARINDEX('CONTACT', PARSED_VALUE2)-1) 
       ELSE PARSED_VALUE2 END 
     , CASE WHEN PATINDEX('%' + '(' + '%',PARSED_VALUE2) >=1 
       THEN left(PARSED_VALUE2,CHARINDEX('(', PARSED_VALUE2)-1) 
       ELSE PARSED_VALUE2 END) PARSED_VALUE4 
    FROM #TEMPP 

但是,我沒有得到想要的結果。這個查詢有什麼問題?

回答

1

試試這個

;WITH cte(PARSED_VALUE2) 
AS 
(
SELECT 'CHIN  CONTACT'UNION ALL 
SELECT 'HAMLET/PH'  UNION ALL 
SELECT 'NameM('   
) 
SELECT PARSED_VALUE2, 
     SUBSTRING(PARSED_VALUE2,0,PATINDEX('%[/(]%',PARSED_VALUE2)) AS PARSED_VALUE4 
FROM cte 

結果

PARSED_VALUE2  PARSED_VALUE4 
------------------------------------- 
CHIN  CONTACT CHIN 
HAMLET/PH   HAMLET 
NameM(    NameM 
+0

感謝您的回答。我有1mn這樣的記錄,實際上,PARSED_VALUE2是一個名字,在少數情況下,這個名字是姓氏。因此,我只希望將特殊字符保留爲姓氏(即A-Z或a-z)。在上面的查詢中也刪除了姓氏。任何其他的選擇? – AskMe

+0

我按照您提供的樣本數據編寫的代碼 – 2017-08-17 14:29:43

1

我建議使用PATINDEX得到第一個特殊字符的索引,然後使用LEFT(指數 - 1),以獲得您所需要的數據。

SELECT LEFT(PARSED_VALUE2, PATINDEX('%[^a-zA-Z0-9]%', PARSED_VALUE2) - 1) 
FROM #TEMPP 
+0

錯誤:傳遞給LEFT或SUBSTRING函數的長度參數無效。注意:對於少數記錄,字母和特殊字符之間沒有空格[例如XYZ /或AQQ(]。這些東西沒有被刪除。 – AskMe

+0

不應該是這樣。試試「SELECT LEFT('XYZ /',PATINDEX ('%[^ a-zA-Z0-9]%','XYZ /') - 1)「,它將導致XYZ。 –