我的输入表是这样的:
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
但是,我没有得到理想的结果。这个查询出了什么问题?
答案 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