2013-03-06 3 views
0

나는 다음과 같은 행이 필드 name 있습니다재 포맷 테이블 데이터는 SQL

`name` 
------ 
John Smith 
George Washington 
Ash Ketchum 
Bill O'Reilly 

I 출력에 행 포맷 싶습니다 : 내가 아는

`name` 
------ 
SMITH, JOHN 
WASHINGTON, GEORGE 
KETCHUM, ASH 
O'REILLY BILL 

을 I가 upper(x.name)을 사용할 수 있습니다 어떻게 이름을 다시 포맷 할 수 있습니까?

+3

할 수 있습니다하지 ... 무엇 로베르토 다 실바는 어떻습니까? 하이픈을 넣지 않은 성은 당신이 시도하는 모든 것을 망칠 것입니다. 각 데이터 항목에 대해 개별 열을 만드는 것이 유일한 방법입니다. 그 사람이 공간으로 구분 된 두 개의 이름 만 가진 곳에, 당신은이 칼럼에 배치합니다. 나머지는 수동으로해야합니다 ... – Ben

+0

해당 권한이없고 현재 사용중인 데이터로만 작업 할 수있는 경우 어떻게합니까? 'CASE WHEN'을 활용 한 어떤 표현이있을 수 없습니까? –

+0

예, 가까이 올 수 있습니다. 제 요점은 당신이하고 싶은 일에 대해 데이터가 잘못 저장된다는 것입니다. 따라서 100 % 정확할 수는 없습니다. 가장 좋은 방법은 데이터 모델을 수정하는 것입니다. 수동 작업이나 고도로 지능적인 파서가 필요합니다. 정의에 따르면 부정확 한 답변을 얻을 수 있습니다. 대부분의 경우를 다룰 수 있습니다. – Ben

답변

1

rdbms가 mySql이라고 가정하면 SQL의 differenct 언어에 맞게 답변을 작성해야합니다.

SELECT concat(substring(name, locate(name, ' ')), ', ', substring(name, 0, locate(name, ' ') - 1)) FROM NAMES; 

여기 실제 문제는 데이터 무결성입니다. 이름의 각 조각에 대해 별도의 열이 있어야 데이터베이스의 형식이 일치되도록 할 수 있습니다. 이상적으로는이 일을 할 것 -이 명시 적으로 방지해야하므로

Select concat(last_name, ', ', first_name) FROM NAMES; 

테이블의 같은 열에

 'name' 
------------------- 
John Smith 
Smith, John 
J Smith 
Smith J 
John q Smith 
Jhon 'the smithmeister' Smith 

모두 허용하는 것은 여러 가지 이유에 대한 나쁜 일이다.

1

이 시도 :

SELECT SUBSTRING_INDEX(`name` , ' ', -1) + ', ' + SUBSTRING_INDEX(`name` , ' ', 1) 
FROM MyTable 

@ 벤은 그들에 여러 공간과 이름에 대한 좋은 지적을합니다. 나는 이것이 당신에게 당신이 원하는 결과물을 줄 것이라는 점을 의심 스럽지만 당신을 시작해야한다.

1

노력이

SELECT Concat(SUBSTRING_INDEX(`name` , ' ', -1) , ', ' , SUBSTRING_INDEX(`name` , ' ', 1)) as name 
FROM your_Table