CS/데이터베이스
SQL(7) 문자열 관련 내장 함수
hyomee2
2024. 7. 31. 18:23
1. 문자열 관련 함수
(1) ASCII(아스키 코드), CHAR(숫자)
SELECT ASCII('A'), CHAR(65);
(2) Bit, Char, Byte 수
- 한글값은 3byte이다.
SELECT BIT_LENGTH('pie'), CHAR_LENGTH('pie'), LENGTH('pie');
(3) CONCAT(문자열1, 문자열2, ...), CONCAT_WS(구분자, 문자열1, 문자열2, ...)
- 문자열을 이어준다.
- CONCAT_WS는 문자열 사이에 구분자를 넣어서 이어준다.
SELECT CONCAT('호랑이', '기린', '토끼');
SELECT CONCAT_WS(',', '호랑이', '기린', '토끼'); # 첫번째 매개변수가 구분자가 된다.
(4) ELT(숫자, 문자열1, 문자열2,...)
: 첫번째 인자 위치의 문자열 반환
SELECT
ELT(2, '사과', '딸기', '바나나'); -- 딸기
(5) FIELD(문자열1, 문자열2, 문자열3,...)
: 첫번째 인자와 같은 문자열의 위치 반환
SELECT
FIELD('딸기', '사과', '딸기', '바나나'); -- 2
(6) FIND_IN_SET(문자열1, 문자열2(쉼표로 구분된 문자열))
: 첫번째 인자의 문자열이 문자열2 SET 내부의 위치 숫자 반환 (없을 경우 0 반환)
SELECT
FIND_IN_SET('사과', '사과,딸기,바나나'); -- 3
- 주의할 점: 두번째 문자열 set에서 콤마 뒤에 띄어쓰기를 하면 안된다!
(7) INSTR(문자열1, 문자열2)
: 두번째 인자가 첫번째 인자 문자열 내부에서 시작 위치 반환
SELECT
INSTR('사과딸기바나나', '딸기'); -- 3
(8) LOCATE(문자열1,문자열2)
- INSTR()과 같지만,인자 순서만 반대이다.
SELECT
LOCATE('딸기', '사과딸기바나나'); -- 3
(9) FORMAT(숫자, 소수점 자리)
: 숫자를 소수점 자리까지 반올림
SELECT FORMAT(123123123123.567567, 3); -- 123,123,123,123.568
(10) BIN(숫자), OCT(숫자), HEX(숫자)
-- 순서대로 2진수, 8진수, 16진수
SELECT BIN(65), OCT(65), HEX(65);
(11) INSERT(기준문자열, 위치, 길이, 삽입할 문자열)
SELECT INSERT('내 이름은 아무개입니다.', 7, 3, '홍길동');
-- 위치 7에서부터 3글자를 홍길동으로 바꾼다.
-- 아래와 같이 길이가 삽입될 문자열 길이보다 커도 에러가 발생하지 않는다.
SELECT INSERT('내 이름은 아무개입니다.', 7, 4, '홍길동'); -- 내 이름은 홍길동니다.
SELECT INSERT('내 이름은 아무개입니다.', 7, 10, '홍길동'); -- 내 이름은 홍길동
(12) LEFT(문자열, 숫자), RIGHT(문자열, 숫자)
: 왼쪽에서부터 숫자개, 오른쪽에서부터 숫자개 문자열 반환
SELECT LEFT('Hello World!', 3), RIGHT('Hello World!', 3);
-- 아래와 같이 숫자가 문자열 길이보다 크더라도 문자열 길이만큼만 반환한다.
SELECT LEFT('Hello World!', 30), RIGHT('Hello World!', 3);
SELECT LENGTH(LEFT('Hello World!', 30)) -- 12
(13) UPPER(문자열), LOWER(문자열)
: 문자열을 대문자/소문자로 변경
SELECT UPPER('Hello World!'), LOWER('Hello World!');
(14) LPAD(문자열1, 숫자, 문자열2), RPAD(문자열1, 숫자, 문자열2)
: LPAD의 경우, 문자열1의 왼쪽을 문자열2로 채워 숫자 길이만큼의 문자열을 반환. RPAD의 경우 반대
SELECT LPAD('왼쪽',6, '@'), RPAD('오른쪽', 6, '@');
-- @@@@왼쪽 -- 오른쪽@@@
SELECT LPAD('왼쪽',6, '안녕하세요'), RPAD('오른쪽', 6, '@');
-- 안녕하세왼쪽 -- 오른쪽@@@
(15) LTRIM(문자열), RTRIM(문자열), TRIM(문자열)
: 문자열의 왼쪽(LTRIM)/오른쪽(RTRIM)/양쪽(TRIM)의 공백을 제거
- BOTH, LEADING, TRAILING으로 방향 설정 가능
SELECT LTRIM(' 왼쪽')
, RTRIM('오른쪽 ')
, TRIM(' mariadb ')
, TRIM(BOTH '@' FROM ' mariadb@@@@')
, TRIM(LEADING '@' FROM '@@@mariadb@@@@')
, TRIM(TRAILING '@' FROM '@@@mariadb@@@@');
(16) REPEAT(문자열, 숫자)
: 문자열을 숫자만큼 반복
SELECT REPEAT("재밌어", 3); -- 재밌어재밌어재밌어
(17) REPLACE(문자열1, 문자열2, 문자열3)
: 문자열1에 있는 문자열2을 문자열3으로 바꿈
SELECT REPLACE('마리아DB', '마리아', 'MARIA'); -- MARIADB
(18) REVERSE(문자열)
: 문자열의 역순으로 반환
SELECT REVERSE('stressed'); -- desserts
(19) SPACE(길이)
: 길이만큼의 공백 반환
SELECT CONCAT('제 이름은', SPACE(5), '이고 나이는', SPACE(3), '세입니다.');
-- 제 이름은 이고 나이는 세입니다.
(20) SUBSTRING(문자열, 시작위치, 길이)
: 시작위치부터 길이 만큼의 문자열 반환
- 길이 생략 시 문자열을 끝까지 반환
SELECT
SUBSTRING('안녕하세요 반갑습니다.', 7, 2), -- 반갑
SUBSTRING('안녕하세요 반갑습니다.', 7); -- 반갑습니다.
(21) SUBSTRING_INDEX(문자열, 구분자, 횟수)
: 횟수가 양수일 경우, 왼쪽에서부터 횟수번째 구분자까지의 문자열을 반환하고,
횟수가 음수일 경우, 오른쪽에서부터 횟수번째 구분자까지의 문자열을 반환
SELECT
SUBSTRING_INDEX('hong.test@gmail.com', '.', 2) -- hong.test@gmail
, SUBSTRING_INDEX('hong.text@gmail.com', '.', -2); -- text@gmail.com