2012-05-17 2 views
0

다음은 조작하려는 데이터입니다. [준비]에서전체 이름 열에서 성과 이름을 파싱합니다.

SELECT  
[SDN_Name],   
CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN 
    LEFT([SDN_Name],(CHARINDEX(', ',[SDN_Name],1)-1))  
ELSE   
    [SDN_Name]  
END as LName, 
CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN 
    SUBSTRING([SDN_Name],CHARINDEX(', ',[SDN_Name])+1, (LEN([SDN_Name]) - CHARINDEX(', ',[SDN_Name])+1)) 
ELSE   
    NULL  
END as FName 

[OFAC] [TP1을 : 나는 두 번째 쉼표

enter image description here

이 전에 성과 이름을 얻기 위해 내가 현재 가지고있는 코드입니다 노력하고 있어요.. ] 경우 전체 이름이 DELOS REYES, 펠리, 주니어 경우 ([SDN_Type] = '개인')

는 예를 들어, 내가 원하는 DELOS REYES FNAM로 LNAME 및 펠리 Semborio로 e 그러나 나는 "Jr."를 붙잡고 싶지 않습니다.

성 및 첫 번째 쉼표의 모든 부분을 구문 분석 할 수 있습니다. 이름의 접미사없이 이름을 캡처하는 CASE 문을 어떻게 작성합니까?

+1

당신이 얻고있는 결과뿐만 아니라 * 원하는 * 결과를 보여줄 수 있습니까? * (현재 사용하고있는 솔루션이 원하는대로 동작하지 않는 것은 어떨까요?) * – MatBailie

+0

마지막 사진은 내가 얻은 결과입니다. reselt 세트 내가 is..for 예를 원하는 : SDN_Name ABDELNUR을 Nury 예수 LNAME ABDELNUR 드 FNAME Nury 내가 LNAME 나에게 단지 첫 번째 이름을 얻을 수 없습니다, 난 몰라 Fname 열의 공백 뒤에 아무 것도 입력하지 마십시오. – user1169520

+0

업데이트했습니다. – user1169520

답변

0

SDN_Name 필드에는 쉼표가 있습니다. 맞습니까? ','대신 'CharIndex'을 사용하면 효과가 있습니다. 이와 같이 :

SELECT [SDN_Name],   
    CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN 
     LEFT([SDN_Name],CHARINDEX(', ',[SDN_Name])-1)  
    ELSE   
     [SDN_Name]  
    END as LName, 
    CASE WHEN CHARINDEX(', ', [SDN_Name]) > 0 THEN   
     SUBSTRING([SDN_Name], CHARINDEX(', ',[SDN_Name])+2, 
      CASE WHEN RIGHT([SDN_Name], 1) = '.' THEN LEN([SDN_Name]-2) ELSE LEN([SDN_Name]) END 
      - (2+CHARINDEX(', ',[SDN_NAME],1)) 
     ) 
    ELSE   
     NULL  
    END as FName 
+0

예, 쉼표이지만 일부 필드의 중간 머리 글자가 여전히 결과 집합에 표시됩니다. 귀하의 솔루션은 원래 reult 세트의 2 공백을 깎아 – user1169520

+0

@ user1169520 고마워, 문자를 자르고 있던 오류를 해결했습니다. 내가 보여준 기록에서 중간 머리 글자가 보이지 않습니다. ** 성, 첫 번째 M. ** 등과 같은 SDN_Names 레코드가 더 있습니까? – McGarnagle

+0

예, 있습니다. – user1169520

관련 문제