SQL 문자열 출력 - SQL munjayeol chullyeog

오라클 PL/SQL 작성시에는 예상치 못한 다양한 문제가 발생합니다. 이런 오류가 프로시저의 어떤 지점에서 발생했는지 알기 위해서는 PINRT 구문을 사용해서 문자를 출력하면 되는데요.

오늘은 오라클 문자 출력하는 방법인 dbms_output.put_line 구문에 대해서 알아보겠습니다.

오라클 PINRT 출력 시스템 설정

프린트 구문의 출력을 하기 위해서는 시스템 세팅을 변경해 줘야 합니다.

명령문을 실행해서 프린트 출력을 ON으로 변경해주세요.

--시스템 설정 변경
SET SERVEROUTPUT ON;

오라클 PINRT 출력

텍스트에 문자열을 출력하는 구문은 다음과 같습니다

--문법

문자열 부분에 원하는 문자를 입력합니다.

dbms_output.put_line('문자열');

 

--예시

문자와 변수 값을 같이 받아올 경우 다음과 같이 사용합니다.

dbms_output.put_line('문자1' || 변수 || '문자2');

이상으로 오라클 PL/SQL 프로시저 작성시 발생하는 오류에 대해서 dbms_output.put_line

구문을 사용해서 오류지점을 확인하는 방법에 대해서 알아보았습니다.

문자열을 자르는 함수에 대해 소개하겠습니다.

먼저 설명에 사용될 테이블입니다.

NO NAME MAIL
1 Aiden
2 Luke
3 John

1. Oracle 에서는 SUBSTR 함수를 사용합니다.

- SUBSTR( 문자열, 시작 위치, 길이 )  >> 문자열에서 시작 위치부터 길이만큼 출력합니다.

SELECT SUBSTR(MAIL, 1, 3) // MAIL의 1번째부터 3글자 출력 결과 : Aid
     , SUBSTR(MAIL, 1, 4) // MAIL의 1번째부터 4글자 출력 결과 : Aide
     , SUBSTR(MAIL, 2, 3) // MAIL의 2번째부터 3글자 출력 결과 : ide
  FROM TABLE
 WHERE NAME = 'Aiden'

2. MS-SQL 과 MySql에서는 SUBSTRING, LEFT, RIGHT 함수를 사용합니다.

- SUBSTRING( 문자열, 시작위치, 길이 ) >> 문자열에서 시작 위치부터 길이만큼 출력합니다.

- LEFT( 문자열, 길이 ) >> 문자열에서 왼쪽부터 길이만큼 출력합니다.

- RIGHT( 문자열, 길이 ) >> 문자열에서 오른쪽부터 길이만큼 출력합니다.

SELECT SUBSTRING(NAME, 2, 4) // NAME의 2번째글자부터 4글자 출력
     , SUBSTRING(NAME, 1, 4) // NAME의 1번째글자부터 4글자 출력
     , LEFT(MAIL, 7) // MAIL을 왼쪽부터 7글자 출력
     , RIGHT(MAIL, 5) // MAIL을 오른쪽부터 5글자 출력
  FROM TABLE
SUBSTRING(NAME, 2, 4) SUBSTRING(NAME, 1, 4) LEFT(MAIL, 7) RIGHT(MAIL, 5)
iden Aide Aiden@g e.com
uke Luke Luke@na r.com
ohn John John@da m.net

굉장히 쉽고 간단한 함수입니다.

실제로 엄청 자주사용되고 유용한 함수이니 꼭 잘 익혀두세요!

안녕하세요, 끙정입니다.

오늘은 함수 두 번째 시간으로 문자열 함수에 대해서 알아보겠습니다.

테이블에 저장하는 가장 흔한 타입은 문자열이며 길이나 형식의 제한이 없어 복합적인 정보를 포함할 수 있습니다.

데이터를 능숙하게 다루려면 문자열을 자유자재로 가공, 추출해야 합니다.

DBMS는 일상적으로 필요한 모든 함수를 다 제공합니다.

지난번과 같이 함수는 오라클을 기본으로 SQL Server와 MariaDB를 같이 알아보겠습니다.

DBMS별로 좌측과 동일하면 '<-'로 표시하고,

우측과 동일하면 '->'로 표시하겠습니다. (MariaDB의 우측은 오라클)

함수가 존재하지 않으면 'X'로 표현하겠습니다.

설명 오라클 SQL Server MariaDB
문자열의 길이
(바이트 수가 아닌 문자의 수)
LENGTH LEN(s) CHAR_LENGTH
문자열의 바이트 수 LENGTHB DATALENGTH(s) LENGTH
첫 문자의 아스키 코드 ASCII(s) <- <-
아스키 코드의 문자 CHR CHAR(n) <-
첫 문자의 유니코드 ASCIISTR UNICODE(s) X
유니코드의 문자 UNISTR NCHAR(n) X
s 문자열의 b 위치에서
l 길이만큼의 부분 문자열
SUBSTR(s, b, l) SUBSTRING(s, b, l) SUBSTRING
SUBSTR, MID
s 문자열의
왼쪽에서부터 n 문자분
SUBSTR(s, 1, n) LEFT(s, n) <-
s 문자열의
오른쪽에서부터 n 문자분
SUBSTR(s, -n) RIGHT(s, n) <-
소문자로 변환 LOWER(s) <- <-
대문자로 변환 UPPER(s) <- <-
단어의 첫자만 대문자로 변환 INITCAP(s) X X
왼쪽 공백 제거 LTRIM <- <-
오른쪽 공백 제거 RTRIM <- <-
양쪽 공백 제거 TRIM <- <-
패턴이 나타나는 위치 반환
(1부터 시작, 없으면 0 리턴)
INSTR(s, p, b, n) CHARINDEX(p, s, b) POSITION(p IN s)
와일드 카드를 사용하여
패턴 검색
X PATINDEX(p, s) X
유사성 평가를 위한
4글자의 코드를 리턴
SOUNDEX(s) <- <-
유사 문자열 판별
(코드로 비교하여 0~4 리턴,
ex_pat, pet, fat)
X DIFFERENCE(s1, s2) X
s에서 s1을 찾아 s2로 변경 REPLACE(s, s1, s2) <- <-
글자를 일대일로 교체
REPLACE와 유사
TRANSLATE X X
b 위치의 l 길이 문자열을
r로 바꿈
X STUFF(s, b, l, r) X
s문자열의 좌우에 c문자를
n회 반복.
문자 생략시 공백 적용
LPAD, RPAD REPLICATE(s, n)
SPACE(n)
REPEAT(s, n)
s를 n의 폭으로 늘리며
나머지는 공백으로 채움.
c를 지정하면 공백 대신 c문자를 채움
LPAD(s, n, c)
RPAD(s, n, c)
X LPAD
RPAD
문자열 반전 REVERSE(s) <- <-
문자열 양쪽에 구분기호를 붙여 식별자로 만듦.
디폴트 구분기호는 [ ]
X QUOTENAME(s, [d]) X
두 문자열 연결 CONCAT(s1, s2) <- <-
SELECT LENGTH('korea대한민국') FROM DUAL; /* --9 */
SELECT LENGTHB('korea대한민국') FROM DUAL; /* --17 */

SQL 문자열 출력 - SQL munjayeol chullyeog
SQL 문자열 출력 - SQL munjayeol chullyeog
SQL 문자열 출력 - SQL munjayeol chullyeog

오라클의 LENGTH 함수는 문자의 개수를 조사합니다.

한글이나 영문이나 모두 한 글자로 취급하기 때문에 'korea대한민국' 문자는 9글자로 되어 있습니다.

바이트 수는 메모리의 길이이며 문자의 종류나 인코딩 방식에 따라 달라지는데,

영문이나 숫자는 1바이트, 한글은 2~3바이트를 차지합니다.

오라클은 한글이 3바이트이기 때문에 17이 나오고,

SQL Server와 MariaDB는 2바이트로 13이 나옵니다.

아래는 문자열의 길이가 n인 필드를 출력합니다.

SELECT * FROM tStaff WHERE LENGTH(name) = 7; /* Oracle */
SELECT * FROM tItem WHERE LEN(item) = 2; /* SQL Server */
SELECT * FROM tCar WHERE CHAR_LENGTH(car) = 3; /* MariaDB */

SQL 문자열 출력 - SQL munjayeol chullyeog
SQL 문자열 출력 - SQL munjayeol chullyeog
SQL 문자열 출력 - SQL munjayeol chullyeog

문자 개수를 출력하는 함수는 DBMS마다 이름이 다르고,

CHAR 타입의 뒤쪽 공백 포함 여부에도 차이가 있어 주의가 필요합니다.

1) 오라클: LENGTH, 뒤쪽 공백 개수 포함

2) SQL Server: LEN, 뒤쪽 공백 개수 제외

3) MariaDB: CHAR_LENGTH, 뒤쪽 공백 개수 제외

고정 길이 문자열인 CHAR 타입은 항상 뒤쪽에 여유 공백이 있습니다.

SQL Server와 MariaDB는 뒤쪽의 공백은 빼고 개수를 세지만 오라클은 뒤쪽 공백의 개수도 포함합니다.

VARCHAR 타입은 뒤쪽 공백이 없어 정확하게 글자 수만 조사합니다.

CONCAT 함수는 인수로 전달한 두 개의 문자열을 합쳐 하나의 문자열을 리턴합니다.

SELECT CONCAT(region, name) FROM tCity;
SQL 문자열 출력 - SQL munjayeol chullyeog

문자열끼리 연결할 경우가 워낙 많아 함수 외에 별도의 연산자도 제공합니다.

오라클은 두 문자열 사이에 || 연산자를 쓰고 SQL Server는 + 연산자를 씁니다.

SELECT region || name FROM tCity; /* Oracle */
SELECT region + name FROM tCity; /* SQL Server */

SQL 문자열 출력 - SQL munjayeol chullyeog
SQL 문자열 출력 - SQL munjayeol chullyeog

문자열 필드 사이에 문자열 상수를 집어넣어 원하는 문장을 만들 수도 있습니다.

CONCAT 함수도 중첩해서 사용하면 여러 개의 문자열을 연결할 수 있습니다.

SELECT region || '도의 ' || name FROM tCity; /* Oracle */
SELECT region +'도의 ' + name FROM tCity; /* SQL Server */

SELECT CONCAT(CONCAT(region, '도의 '), name) FROM tCity; /* Oracle */
SELECT CONCAT(region, '도의 ', name) FROM tCity; /* SQL Server, MariaDB */

SQL 문자열 출력 - SQL munjayeol chullyeog
SQL 문자열 출력 - SQL munjayeol chullyeog

그만 알아보겠습니다.

출처

http://www.yes24.com/Product/Goods/101637633

김상형의 SQL 정복 : 소문난 명강의 (무료특별판) - YES24

DBMS에 제약 없이 SQL을 활용한다!핵심 원리를 알려주는 SQL 바이블 DBMS 제품이나 개발툴이 아닌 SQL 언어 그 자체를 배우는 바이블 도서다. 특정 DBMS에 종속적인 사용법보다는 표준화된 데이터 관리

www.yes24.com

SQL 문자열 출력 - SQL munjayeol chullyeog