데이터베이스/SQL

1667. Fix Names in a Table

칼퇴시켜주세요 2022. 12. 5. 16:39
728x90

Users 테이블에 name 필드에서 name의 첫번째 문자는 대문자, 이후 문자는 소문자로 변환하여 반환하는 SQL을 작성하는 문제이다. (핵심은 SQL의 문자열 함수를 사용해 적절히 변환 하는것이다.)

 

Mysql의 문자열 함수는 다음과 같은 것이 존재한다.

 함수 사용법  반환 값
 ASCII()   ASCII(t)  t의 아스키 코드값 리턴
 CONCAT()  CONCAT(t1,t2,.....)  t1t2 형식의 문자열
 CONCAT_WS()  CONCAT_WS(S,t1,t2,....)  t1St2S.. 형식의 문자열
 LENGTH()  LENGTH(t)  문자열 t의 길이
 CHAR_LENGTH()  CHAR_LENGTH(t)  문자열 t의 길이
 single-byte, multi-byte 미구별
 CHARACTER_LENGTH()  CHARACTER_LENGTH(t)
 RIGHT()  RIGHT(t,x)  문자열 t의 오른쪽 x개
 LEFT()  LEFT(t,y)  문자열 t의 왼쪽 y개
 MID()  MID(t,x,y)  문자열 t의 x위치부터 y개수만큼 출력
 TRIM()  TRIM(t)  문자열 t의 공백제거된 문자열
 LTRIM()  LTRIM(t)  문자열 t의  왼쪽 공백 제거
 RTRIM()  RTRIM(t)  문자열 t의  오른쪽 공백제거
 UCASE()   UCASE(t)  대문자화된 문자열
 UPPER()  UPPER(t)
 LCASE()  LCASE(t)  소문자화된 문자열
 LOWER()  LOWER(t)
 SUBSTRING()  SUBSTRING(t,x,y)  문자열 t의 x번째에서 y개의 문자열
 SUBSTR()  SUBSTR(t,x,y)
 SUBSTRING_INDEX()  SUBSTRING_INDEX(str, delimiter, n)  문자열 t에서 n번째 구분자앞까지의 문자열
 INSERT()  INSERT('문자열','시작위치','길이','새로운문자열')  문자열의 시작위치부터 길이만큼
 새로운 
문자열로 대치
 REPLACE()  REPLACE('문자열','기존문자열','바뀔문자열')  문자열 중 기존문자열을 바뀔문자열로 대체
 REPEAT()  REPEAT(t, n)   문자열 t를 n만큼 반복 
 INSTR()  INSTR(t,x)  t문자열에서 문자열x의 위치 값
 REVERSE()  REVERSE(t)  문자열 t를 반대로 출력
 SPACE()  SPACE(n)  n번 반복된 공백 문자열 출력
 LPAD()  LPAD(t, len, padstr)  padstr로 t의 왼쪽에 n자리수가 될때까지 붙인다.
 RPAD()  RPAD(t, len, padstr)  padstr로 t의 오른쪽에 n자리수가 될때까지 붙인다.
 STRCMP()  STRCMP(t1, t2)  동일하면 0 , 정렬순서 빠르면 -1 , 
 정렬순서 늦으면 1 반환
 FIND_IN_SET()  FIND_IN_SET (search string, string list)  
 LOCATE()  LOCATE(substr,str)
 LOCATE (search str, str, [position])
 
 POSITION()  POSITION(substr IN str)  t 문자열에서 substr 의 위치

이렇게 많은 함수가 있다니.... 

CONCAT을 사용하여 문자열을 합치는데 각각의 문자열을 SUBSTRING을 통해 조건에 맞는 변환을 시켜준다.

(문제 마지막에 user_id로 정렬 하라는 조건을 꼭 확인하지!!!)

select user_id, concat(upper(substring(name,1,1)),lower(substring(name,2))) as name 
from Users 
order by user_id asc

 

반응형

'데이터베이스 > SQL' 카테고리의 다른 글

1527. Patients With a Condition  (0) 2022.12.07
1484. Group Sold Products By The Date  (1) 2022.12.06
196. Delete Duplicate Emails  (0) 2022.12.05
627. Swap Salary  (0) 2022.12.03
1873. Calculate Special Bonus  (0) 2022.12.03