[SQL#120]1667. Fix Names in a Table/ + upper, lower, concat 정리

Gi Woon Lee·2024년 9월 5일

SQL

목록 보기
17/33

TIL: SQL에서 이름의 첫 글자만 대문자로 변환하기

1667. Fix Names in a Table

문제 컨셉

사용자 이름의 첫 번째 알파벳만 대문자로 수정하고, 나머지는 소문자로 변경한 후 user_id를 기준으로 오름차순 정렬하라.

전략

처음에는 str.capitalize()를 사용하려 했으나, 이는 Python 함수로 SQL에서는 사용할 수 없다는 점을 깨달음. UPPER(), LOWER()와 같은 문자열 변환 함수도 SQL과 Python 모두에 존재하지만, 두 언어의 함수 사용법을 헷갈리지 않도록 정리할 필요가 있음.

알아야 할 SQL 개념

  1. LEFT(string, number_of_characters)

    • 목적: 문자열의 왼쪽에서 지정한 수만큼의 문자를 추출함.
    • 사용법:
      LEFT(name, 1)
    • 설명: name에서 첫 글자(1번째 문자)를 추출함.
    • 예시: 'John'이라는 문자열에서 LEFT(name, 1)'J'를 반환함.
  2. CONCAT(string1, string2, ..., stringN)

    • 목적: 여러 문자열을 하나로 결합함.
    • 사용법:
      CONCAT(string1, string2)
    • 설명: 주어진 문자열들을 순서대로 결합하여 하나의 문자열로 만듦.
    • 예시: CONCAT('Hello', ' ', 'World')'Hello World'를 반환함.
  3. SUBSTRING(string, start, length)

    • 목적: 지정된 위치에서 시작하여 특정 길이만큼의 문자를 추출함.
    • 사용법:
      SUBSTRING(name, 2)
    • 설명: name에서 두 번째 문자부터 시작하여 문자열 끝까지 추출함.
    • 예시: 'John'이라는 문자열에서 SUBSTRING(name, 2)'ohn'을 반환함.

1번 시도:

SELECT 
    user_id,
    capitalize(name) AS name
FROM Users
ORDER BY 1;
  • 틀린 이유:
    • capitalize()는 Python 함수로 SQL에서는 사용할 수 없음.
    • UPPER(), LOWER()와 같은 SQL 문자열 변환 함수 사용 필요.

정답 코드:

SELECT 
    user_id, 
    CONCAT(UPPER(LEFT(name, 1)), LOWER(SUBSTRING(name, 2))) AS name
FROM Users
ORDER BY user_id;

정리

  • SQL과 Python은 유사한 문자열 처리 함수를 제공하지만, 각 언어의 문법과 사용법에 유의해야 한다.
  • 특히 LEFT(), CONCAT(), SUBSTRING() 같은 함수들은 문자열의 일부를 추출하거나 결합하는 데 유용하며, SQL에서의 UPPER()LOWER()를 조합하여 이름의 첫 글자를 대문자로 변환할 수 있다.
  • 파이썬과 SQL의 공통 개념이지만 미묘한 차이 때문에 혼동할 수 있으므로 이 점을 주의해야 한다.

애매하게 아는 것을 확실히 아는 것으로 만들고 넘어가자!!! 🕺

0개의 댓글