프로그래밍 언어/SQL

SQL 함수 간단 실습 :: 문자열 관련 함수

gamjadori 2024. 1. 23. 15:48
728x90

<대문자, 소문자>

  • UCASE, UPPER: 대문자
  • LCASE, LOWER: 소문자
SELECT UCASE(customername), LCASE(customername)
FROM customers;
>> customers에서 customername을 대문자와 소문자로 변형하여 출력하시오.

<결과>

<문자열 연결>

  • CONCAT(...): 문자열 연결 함수
SELECT CONCAT('Hello', ' ', 'This is ', 2024);

<결과>

  • CONCAT_WS(S, ...): …을 S로 이어 붙여줌
SELECT CONCAT_WS('-', 2024, 01, 05);
>> 2024-1-5 (숫자로 취급하여 0이 사라짐)

<결과>

SELECT CONCAT_WS(' ', firstname, lastname) AS FullName
FROM employees;
>> employees에서 firstname, lastname을 ' '로 이어붙여 
FullName로 출력하시오.

<결과>

<문자열 자르기>

  • SUBSTR(): 문자열 자르기
  • LEFT(): 왼쪽부터 N글자를 자르기
  • RIGHT(): 오른쪽부터 N글자 자르기
  • 음수를 적으면 반대로 숫자 세기
SELECT SUBSTR('ABCDEFG', 3),
    SUBSTR('ABCDEFG', 3, 2),
    SUBSTR('ABCDEFG', -4),
    SUBSTR('ABCDEFG', -4, 2);
>> 'ABCDEFG'를 세번째부터 잘라내라,
'ABCDEFG'를 세번째부터 잘라내서 두 자리만 출력해라,
'ABCDEFG'를 마지막자리부터 네 자리를 잘라내라,
'ABCDEFG'를 마지막 네번째부터 잘라서 두 자리만 출력해라.

<결과>

SELECT LEFT('ABCDFE', 3),
    RIGHT('ABCDEF', 3);
>> 'ABCDFE'를 왼쪽에서부터 세 자리만 잘라 출력하고,
'ABCDFE'를 오른쪽부터 세 자리만 잘라 출력해라.

<결과>

SELECT orderdate,
    LEFT(orderdate, 4) as Year,
    SUBSTR(orderdate, 6, 2) as Month,
    RIGHT(orderdate, 2) as Day
FROM orders
WHERE SUBSTR(orderdate, 6, 2) = '07';
>> orders에서 orderdate를 여섯번째자리부터 두 글자만 잘랐을 때, 07인 경우
orderdate가 4이면 Year으로,
orderdate의 여섯번째 자리가 두글자면 Month로,
orderdate가 2이면 Year으로 출력해라.

<결과>

<문자열 세기>

  • LENGTH: 문자의 수
  • CHARACTER_LENGTH: 문자열의 문자 길이 (세는 기준: 바이트 길이)
SELECT LENGTH('ABCDE'),
    LENGTH('가나다라마'),
    CHARACTER_LENGTH('ABCDE'),
    CHARACTER_LENGTH('가나다라마');
>> 'ABCDE'의 문자의 수,
'가나다라마'의 문자 길이,
'ABCDE'의 문자 길이,
'가나다라마'의 문자 개수를 출력하시오.
**영어는 1 바이트, 한국어는 3 바이트

<결과>

<공백 제거>

  • TRIM, LTRIM, RTRIM: 공백 제거 함수
SELECT CONCAT('|', '   HELLO  ', '|'),
    CONCAT('|', LTRIM('   HELLO  '), '|'),
    CONCAT('|', RTRIM('   HELLO  '), '|'),
    CONCAT('|', TRIM('   HELLO  '), '|');
>>'   HELLO  '과 '|'를 '|'로 연결하고,
'   HELLO  '의 왼쪽 공백을 제거하고 '|'와  '|'로 연결하고,
'   HELLO  '의 오른쪽 공백을 제거하고 '|'와 '|'로 연결하고,
'   HELLO  '의 공백을 제거하고 '|'와 '|'로 연결해라.

<결과>

<문자열 추가>

  • LPAD(S, N, P), RPAD(S, N, P): S가 N글자가 될 때까지 P를 추가, 문자를 추가
SELECT LPAD('ABC', 5, '-'),
    RPAD('ABC', 5, '-');
>> 'ABC'의 왼쪽에 -를 추가하는데, 글자수가 5가 될 때까지 추가하고
'ABC'를 오른쪽에 -를 글자수가 5가 될 때까지 추가하라.

<결과>

SELECT LPAD(supplierid, 5, 0),
    RPAD(price, 6, 0)
FROM products;
>> products 중에서 supplierid 항목의 왼쪽에 0를 다섯자리가 될 때까지 추가하고,
products 중에서 price 항목의 오른쪽에 0을 여섯자리가 될 때까지 추가해라.

<결과>

 

<문자열 대체>

  • REPLACE(S, A, B) S 중에서 A를 B로 변경 (문자 변경)
SELECT REPLACE('맥도날드에서 맥도날드 햄버거를 먹었다.', '맥도날드', '버거킹');
>> '맥도날드에서 맥도날드 햄버거를 먹었다.' 중에서 '맥도날드'를 '햄버거'로 변경해라.

<결과>

SELECT REPLACE(description, ', ', ' and ') FROM categories;
>> categories에서 description 항목 중 ,를 and로 변경해라.

<결과>

<문자 위치 찾기>

  • INSTR(S, s) S중에서 s의 첫 위치를 반환, 없으면 0
SELECT INSTR('ABCDE', 'ABC'),
    INSTR('ABCDE', 'BCDE'),
    INSTR('ABCDE', 'C'),
    INSTR('ABCDE', 'F');
>> 'ABCDE' 중에서 'ABC'이 처음 나오는 위치를 반환하고,
'ABCDE' 중에서 'BCDE'이 처음 나오는 위치를 반환하고,
'ABCDE' 중에서 'C'이 처음 나오는 위치를 반환하고,
'ABCDE' 중에서 'F'이 처음 나오는 위치를 반환하라.

<결과>

SELECT * FROM customers
WHERE INSTR(`CustomerName`, ' ') BETWEEN 1 AND 6;
>> customers 중에서
CustomerName 항목 중 ' '이 나오는 자리가 1에서 6사이에 있는 데이터를 반환하시오.

<결과>

<형 변환 함수>

  • CAST(A, T): A를 T형으로 변환, 형변환 함수
  • 문자열을 날짜로 변환하거나 숫자 형식을 문자열로 변환
SELECT '01' + '1', '01' + 1,
    CAST('01' AS DECIMAL) = CAST('A' AS DECIMAL);
>> '01' + '1', '01' + 1을 출력하고,
'01'을 DECIMAL로 이름붙이고 'A'를 DECIMAL로 이름 붙인 것이 같은지 아닌지 출력하시오.

<결과>