본문 바로가기

공부 자료/DataBase

[SQL] 문자열 함수

문자 함수

 

1. CONCAT(문자열1, 문자열2)

: 문자열1과 문자열2를 결합

SELECT CONCAT(문자열1, 문자열2) FROM [테이블명];
-- emp 테이블에서 ename(job) 형태로 만들어 출력
SELECT CONCAT(ename, '(', job, ')') AS 'ename_job' FROM emp;

-- SMITH's sla is $sal 형태로 만들어 출력
-- 문자열은 작은 따옴표를 이용하기 때문에 '를 출력하기 위해서는 ''로 작성해야 출력됨
SELECT CONCAT(ename,'''s sal is $',sal) FROM emp;

 

 

2. INSERT(기준 문자열, 시작위치, 변경 문자 길이, 변경할 문자)

: 문자열의 일부를 변경

SELECT INSERT(문자열, 시작 위치, 변경 문자열 길이, 변경할 문자) FROM [테이블명];
-- naver를 kosta로 변경
SELECT INSERT('http://naver.com', 8, 5, 'kosta');

-- student 테이블에서 주민번호 뒤 7자리를 *로 변경
SELECT studno, name, INSERT(jumin, 7, 7, '*******') 주민번호, grade 학년 FROM student;

-- gogak 테이블의 고객번호와 이름 조회(단, 이름은 가운데 글자를 *로 변경)
SELECT gno 고객번호, INSERT(gname, 2, 1, '*') 이름 FROM gogak;

 

 

3. INSTR(문자열, 찾는 특정 문자)

: 문자열 내에서 찾는 특정 문자의 위치(숫자)를 반환

SELECT INSTR(문자열, 특정 문자) FROM [테이블명];
-- 문자열에서 n이 위치한 위치 출력
SELECT INSTR('http://naver.com', 'n');

-- student 테이블의 tel에서 )의 위치 구하기
SELECT INSTR(tel, ')') FROM student;

 

 

4. SUBSTR(문자열, 시작 위치) , SUBSTR(문자열, 시작위치, 출력 문자열 길이), SUBSTRING(문자열, 시작위치, 출력 문자열 길이)

: 문자열에서 시작 위치를 기준으로 문자열 반환 (출력 문자열의 길이가 정해져 있지 않으면 끝까지 출력)

: 문자열의 비교이기 때문에 따옴표를 쓰지 않아도 문자로 인식하여 자동 형변환 진행

SELECT SUBSTR(문자열, 시작 위치, 출력 문자열 길이) FROM [테이블명];
SELECT SUBSTR(문자열, 시작 위치) FROM [테이블명];
SELECT SUBSTRING(문자열, 시작 위치, 출력 문자열 길이) FROM [테이블명];
SELECT SUBSTRING(문자열, 시작 위치) FROM [테이블명];
-- 8번째부터 5개 가져오기
SELECT SUBSTR('http://naver.com', 8, 5);

-- 8번째부터 맨 뒤까지 가져오기
SELECT SUBSTR('http://naver.com', 8);

-- student 테이블에서 tel의 )를 이용하여 지역번호 출력하기
SELECT SUBSTR(tel, 1, INSTR(tel, ')')-1) 지역번호 FROM student;

-- student 테이블에서 주민번호 생년월일이 9월인 학생 조회
SELECT * FROM student WHERE SUBSTR(jumin, 3, 2)='09';

-- 숫자 앞에는 0이 올 수 없기 때문에 09를 문자로 인식하여 자동으로 형변환을 해줌
-- 9를 쓸 경우에는 SUBSTR을 숫자로 변환해주어서 비교해주기 때문에 오류가 나지 않음
SELECT * FROM student WHERE SUBSTR(jumin, 3, 2)=09;

-- student 테이블에서 tel의 가운데 자리 숫자 조회
SELECT SUBSTR(tel, INSTR(tel, ')')+1, (INSTR(tel, '-')-INSTR(tel, ')'))-1) 가운데번호 FROM student;

 

 

5. LENGTH(문자열)

: 공백을 포함해 문자열의 길이(바이트 수)를 반환

: 영어는 한 글자 당 1byte, 한글은 한 글자 당 3byte

: 출력하고자 하는 문자열, 칼럼명에 바로 사용 가능

SELECT LENGTH('칼럼명') FROM [테이블명];
-- length : 문자열의 바이트 길이 구하기 (영문 한 글자 : 1byte, 한글 한 글자 : 3byte)
SELECT email, LENGTH(tel) FROM student;

-- professor 테이블의 이메일에서 @ 뒤의 문자열의 길이를 구하기
SELECT LENGTH(email) FROM professor;
SELECT email, INSTR(email, '@') FROM professor;
SELECT email, LENGTH(SUBSTR(email, INSTR(email, '@')+1)) '@ 뒤 길이' FROM professor;

-- @뒤의 메일 형식을 kost.com으로 변환
SELECT email, INSERT(email, INSTR(email, '@')+1, LENGTH(SUBSTR(email, INSTR(email, '@')+1)), 'kosta.com') 변환메일 FROM professor;

-- 이름의 바이트 길이 출력 (영문과 한글의 문자열 길이가 다름) 문자열의 길이가 아닌 Byte 수, 한글은 한 글자에 3Byte
SELECT ename, LENGTH(ename) FROM emp;
SELECT name, LENGTH(name) FROM student;

 

 

6. CHAR_LENGTH(문자열)

: 문자열의 글자수를 반환

SELECT CHAR_LENGTH(칼럼명) FROM [테이블명];
-- 이름의 길이(바이트 길이 아님) 출력
SELECT ename, CHAR_LENGTH(ename) FROM emp;
SELECT name, CHAR_LENGTH(name) FROM student;

 

 

7. LOWER(문자열), LCASE(문자열)

: 영문자를 소문자로 변환

SELECT LOWER(칼럼명) FROM [테이블명];
SELECT LCASE(칼럼명) FROM [테이블명];
-- emp 테이블의 ename을 소문자로 변환
SELECT ename, LOWER(ename) FROM emp;
SELECT ename, LCASE(ename) FROM emp;

 

 

8. UPPER(문자열), UCASE(문자열)

: 영문자를 대문자로 변환

SELECT UPPER(칼럼명) FROM [테이블명];
SELECT  UCASE(칼럼명) FROM [테이블명];

 

 

9. TRIM(문자열, 지정된 문자) / RTRIM(문자열, 지정된 문자) / LTRIM(문자열, 지정된 문자)

: 왼쪽 및 오른쪽 / 오른쪽 / 왼쪽에서 지정된 문자를 삭제

: 지정된 문자가 주어지지 않은 경우 공백 삭제

SELECT TRIM(칼럼명) FROM [테이블명];
-- trim : 앞 뒤 공백 제거
SELECT LENGTH('test.     '), LENGTH(TRIM('  .test '));
SELECT LENGTH('t e s t'), LENGTH(TRIM('t e s t'));

---------------------------------------

-- ltrim : 왼쪽 공백 제거
SELECT LENGTH('  test   '), LENGTH(LTRIM('  test   '));

---------------------------------------

-- rtrim : 오른쪽 공백 제거
SELECT LENGTH('  test   '), LENGTH(RTRIM('  test   '));

 

 

10. LPAD(문자열, 길이, 채울 문자), RPAD(문자열, 길이, 채울 문자)

: 문자열의 왼쪽/오른쪽을 특정 문자로 채워 넣고 반환

SELECT LPAD(칼럼명, 채울 문자) FROM [테이블명];
SELECT RPAD(칼럼명, 채울 문자) FROM [테이블명];

-- lpad(칼럼명, 길이, 왼쪽에 채울 문자) : 왼쪽을 특정 문자로 채워넣기 (문자가 여러개면 남는 자리만큼 해당 문자를 채워넣음)
SELECT sal, lpad(ename, 20, ' ') 이름 FROM emp;
SELECT sal, lpad(ename, 20, '8') 이름 FROM emp;
SELECT LPAD(email, 20, '123456789') FROM professor;

-- rpad(칼럼명, 길이, 오른쪽에 채울 문자) : 오른쪽을 특정 문자로 채워넣기
SELECT sal, rpad(ename, 20, ' ') 이름 FROM emp;
SELECT sal, rpad(ename, 20, '8') 이름 FROM emp;

 

'공부 자료 > DataBase' 카테고리의 다른 글

[SQL] 날짜 함수  (0) 2023.09.05
[SQL] 숫자 함수  (0) 2023.09.05
[SQL] WHERE 및 WHERE 연산자  (0) 2023.09.05
[SQL] SELECT 및 SELECT 관련 쿼리  (1) 2023.09.05
[SQL] CASE문 CASE WHEN THEN END  (0) 2023.09.05