본문 바로가기

코딩공부

[SQL] MySQL 내장함수 #1 (제어흐름함수, 문자열 함수)

✍️ Study Note

 

 

 


 

 

 

[제어 흐름 함수]

1. IF (수식, 참 값, 거짓 값)

  • 수식 = 참 -> 참 값 
  • 수식 = 거짓 -> 거짓 값 

 

2. IFNULL (수식1, 수식2)

  • 수식1 = NULL -> 수식2 값
  • 수식1 = NOT NULL -> 수식1 값 

 

3. NULLIF (수식1, 수식2)

  • 수식1 = 수식2 -> NULL
  • 수식1 ≠ 수식2 -> 수식1 값 

 

4. CASE ~ WHEN ~ ELSE ~ END

  • 'CASE 값' = 'WHEN 값' --> 'THEN 값' 
  • 'CASE 값' ≠ 'WHEN 값' --> 'ELSE 값' 

 

SELECT IF (100>200, '참이다', '거짓이다'); -- [결과 : '거짓이다]
SELECT IFNULL (NULL, '널이네요'), IFNULL (100,'널이네요'); -- [결과 : '널이군요', 100]
SELECT NULLIF (100, 100), NULLIF (200,100); -- [결과 : NULL, 200]
SELECT CASE 10 
 WHEN 1 THEN '일'
    WHEN 5 THEN '오'
    WHEN 10 THEN '십'
    ELSE '모름'
END AS 'CASE 연습'; -- [결과 : '십']

 

 

[문자열 함수]

1. ASCII, CHAR

  • ASCII : 아스키 코드값 -> 문자
  • CHAR : 문자 -> 아스키 코드값

 

2. BIT_LENGTH, CHAR_LENGTH, LENGTH

  • BIT_LENGTH : 할당된 BIT 크기
  • CHAR_LENGTH : 문자수
  • LENGTH : 할당된 BYTE 수

 

3. CONCAT, CONCAT_WS

  • CONCAT (A,B) : A,B 문자 연결
  • CONCAT_WS (구분자, A,B) : A와 B 사이에 구분자 추가되어 문자 연결

 

SELECT CONCAT ('백조의', '호수'); -- 결과 : 백조의호수
SELECT CONCAT_WS('&', '오데트', '데릭'); -- 결과 : 오데트&데릭

 

 

4. ELT, FIELD, FIND_IN_SET, INSTR, LOCTE

1) ELT (위치, 문자1, 문자2, 문자3..) : 위치 X 번째에 해당하는 문자열 반환

2) FIELD (찾는 문자, 문자1, 문자2, 문자3..) :

  • 문자 목록 중 찾는 문자의 위치 X 반환,
  • 매치되는 문자 없으면 0 반환

3) FIND_IN_SET (찾는 문자, 문자열 리스트)

  • 문자열 리스트에서 찾는 문자의 위치 X 반환.
  • 문자열 리스트는 '콤마(,)'로 구분되며, 공백이 없어야 함. ('문자1,문자2,문자3')

4) INSTR (문자열 리스트, 일부 문자열) 

  • 문자열 리스트 중 일부 문자열의 시작 위치 X 반환.
  • 문자열 리스트의 '콤마(,)'는 하나의 문자로 인식됨. (FIN_IN_SET과 차이점)

5) LOCATE (일부 문자열, 문자열 리스트) -

  • INSTR과 동일하나, 파라미터 순서가 반대.
  • 문자열 리스트 중 일부 문자열의 시작 위치 X 반환.

 

SELECT 
  ELT (2, '하나', '둘', '셋'),  -- 결과 : 둘
  FIELD ('둘', '하나', '둘', '셋'), -- 결과 : 2
  FIND_IN_SET ('둘', '하나,둘,셋'), -- 결과 : 2
  INSTR('하나둘셋','둘'), -- 결과 : 3
  LOCATE ('둘','하나둘셋'); -- 결과 : 3

 

 

5. FORMAT

1000단위 콤마(,) 추가 + 소숫점 자릿수 지정

 

6. BIN & HEX & OCT

2진수, 16진수, 8진수 값

 

7. INSERT (기존 문자열, 대체시작 위치, 삭제 길이, 삽입 문자열)

'기존 문자열'에서 '대체 시작위치'부터 '삭제 길이'만큼 삭제한 후, '삽입 문자열'을 추가함) 

 

8. LEFT & RIGHT (문자열, 길이)

 '문자열' 왼쪽 또는 오른쪽에서 '길이'만큼 반환

 

9. UPPER & LOWER (문자열)

대문자 또는 소문자로 변환

 

10. LPAD & RPAD (문자열, 길이, 추가 문자)

'문자열'을 '길이'만큼 늘린 후 오른쪽 또는 왼쪽에 '추가 문자'를 합쳐서 반환

 

SELECT FORMAT(1234.56789, 4); -- 결과 : 1,234.5678
SELECT BIN(31), HEX(31), OCT(31); -- 결과 : 1111, 1F, 37
SELECT INSERT ('ABCDEFGHI', 3, 4, '@@@@');-- 결과 : 'AB@@@@GHI'
SELECT LEFT ('ABCDEFGHI', 3), RIGHT('ABCDEFGHI', 3); -- 결과 : 'ABC', 'GHI'
SELECT LOWER('ABCDEFGHI'), UPPER('abcdefghi'); -- 결과 : 'abcdefghi', 'ABCDEFGHI'
SELECT LPAD('이것이', 5, '##'), RPAD ('이것이', 5, '##'); -- 결과 : '##이것이', '이것이##'

 

 

11. LTRIM & RTRIM & TRIM (문자열)

왼쪽,오른쪽, 양쪽의 공백을 제거 (중간 공백은 제외)

 

11-1. TRIM (LEADING/BOTH/TRAILING 삭제할 문자 FROM 문자열)

문자열의 앞, 뒤, 양쪽 에 있는 '삭제 문자'를 삭제.

 

12. REPEAT (문자, 반복 횟수)

'반복횟수'만큼 반복한 값을 반환.

 

12. REPLACE (문자열, '삭제할 문자', '대체할 문자')

'문자열' 안에서 '삭제할 문자'를 없애고, 그 자리에 '대체할 문자'를 넣어 반환.

 

13. REVERSE (문자열)

문자열을 끝부터 반대로 반환

 

14. SPACE (10)

'숫자'만큼 공백을 반환

 

15. SUBSTRING (문자열, 시작위치, 길이)

'문자열'에서 '시작위치'부터 '길이'만큼만 반환

 

16. SUBSTRING_INDEX (문자열, 구분자, 횟수)

  • 횟수 = 양수 -> '문자열' 왼쪽부터 '횟수'만큼 반환하고, 이후는 삭제
  • 횟수 = 음수 -> '문자열' 오른쪽부터 '횟수'만큼 반환하고, 이후는 삭제

 

SELECT LTRIM('    이것이'), RTRIM('이것이     ');
-- 결과 : '이것이'

SELECT TRIM('     이것이     '), TRIM(BOTH 'ㅋ' FROM 'ㅋㅋㅋ재밌어요ㅋㅋㅋ');
-- 결과 : '이것이', '재밌어요'

SELECT REPEAT ('이것이', 3);
-- 결과 : '이것이이것이이것이'

SELECT REPLACE('이것이 MYSQL이다', '이것이', 'THIS IS');
-- 결과 : 'THIS IS MYSQL이다'

SELECT REVERSE ('MYSQL');
-- 결과 : 'LQSYM'

SELECT CONCAT('이것이', SPACE(10), 'MYSQL이다');
-- 결과 : '이것이       MYSQL이다'

SELECT SUBSTRING('백조의호수이야기', 3, 2);
-- 결과 : '의호'

SELECT SUBSTRING_INDEX('cafe.naver.com', '.',2), SUBSTRING_INDEX('cafe.naver.com', '.',-2);
-- 결과 : 'cafe.naver', 'naver.com'