删除特殊字符后的字符串 - SQL Server

时间:2017-08-17 12:25:45

标签: sql-server sql-server-2008

我的输入表是这样的:

 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

但是,我没有得到理想的结果。这个查询出了什么问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我建议使用PATINDEX获取第一个特殊字符的索引,然后使用LEFT(index - 1)获取所需的数据。

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