2009-12-05 2 views
4

이 SQL은 복잡해 보입니다. 필드 중 하나 또는 둘 다 NULL 일 수있는 경우 FirstName, LastName을 가져 오는 더 쉬운 방법이 있습니까?SQL의 성, 이름이 너무 복잡합니까?

SELECT COALESCE(LastName,'')+ 
     CASE WHEN LastName+FirstName IS NOT NULL THEN ', ' END+ 
     COALESCE(FirstName,'') AS Name 
FROM Person 
+0

이와 같이 이름을 자주 표시해야하는 경우 영구 계산 필드를 만드는 것이 좋습니다. – HLGEM

+0

@HLGEM - 재미있는 질문 일 수도 있습니다. – Hogan

답변

13

어떻게 firstname 또는 lastname이 경우 다음합니다 (,와) 널 (null) 전체 첫번째 표현의 유착을 강제하는 것은 혼자, 둘째, lastname을 널 조사하기된다이며, 경우

SELECT COALESCE(LastName + ', ' + FirstName, 
       LastName, FirstName) Name 
FROM Person 

에 대한 lastname은 null이고, 마지막으로 firstname 만 있습니다. 당신이 사용하게 될 경우는 peristed 계산 된 열을 사용하여 당신은 테이블이 미리 계산 할 수

SELECT Isnull(LastName,'') + ', ' + Isnull(FirstName,'') 
FROM Person 
+2

사실, 당신은 하나를 잊어 버렸습니다. COALESCE (성 +, 성 + 성, 성, 이름이 불쌍합니다.) 그냥 농담입니다. – Stu

+0

합병에 쉼표를 붙이면이 작업을 수행 할 수 있습니까? 나는 그것이 작동하면 새로운 것을 배웠을 지 모르지만 나는 이것이 결코 NULL이 될 수 없다고 생각합니다. – Dusty

+5

문자열을 TSQL의 null 문자열에 연결할 때 null이 반환됩니다. 어느 쪽인가가 null의 경우, 캐릭터 라인 정수는 최초의 인수로 null에 이동합니다. – Hogan

-3

... 이름의이 모양은 수시로. 필요한 경우 열을 인덱싱 할 수도 있습니다.

ALTER TABLE A 
ADD [person_name_last_first] AS COALESCE(LastName + ', ' + FirstName, 
       LastName, FirstName) PERSISTED 

가장 큰 장점은 이름이 일관되게 표시됩니다 그리고 당신은이 작업을 수행하려면 데이터베이스의 시간을 사용하는 것이 첫 번째와 마지막 이름이 추가 될 때 또는 변경, 다시이 코드 조각을 쓸 필요가 없을 것입니다 .

+3

이름이 빈약하다고 생각되면 쉼표가 반환됩니다. 나는 그것을 downvote하지 않을 것이다. 그러나 그것도 upvote하지 않을 것이다. :) – Dusty

+1

이것은 작동하지 않습니다 ... "Frist"및 "Last"와 같은 결과가 표시됩니다. – Hogan

+0

미안하지만 사용자가 질문을 지정하지 않았습니다. – mRt

1

과 같은 작업을 수행 할 수 있습니다 MSSQL에 나는이 모든 복잡한 생각하지 않습니다

+0

+1, nb, 구문이 약간 다른 모든 플랫폼에서 사용할 수 있습니다. – Hogan

관련 문제