본문 바로가기

Database

[DB] MySQL 응용 공식_CONCAT, 형식변환, ASCII, LENGTH 등

320x100

MySQL에서 사용할 수 있는 간단한 함수들을 정리해보았습니다.

(필자 확인용)

 

※ 아래 소개되어진 함수 이외에도 다양한 함수가 존재합니다.

 

CONCAT 부터 시작합니다.

 

CONCAT ( 문자열 )

SELECT CONCAT('.','/',';')

CONCAT 다음의 문자열들을 합쳐줍니다.

 

묵시적 형 변환

SQL에서는 문자열을 작성하더라도 자동으로 정수로 변환해서

연산하는 기능이 있습니다. 이를 바꾸기 위해서는 CONCAT를 따로 써주어야 합니다.

 

SELECT '100' + '200';

이렇게 문자열로 작성하더라도, 300이 반환됩니다.

문자열로 바꾼다면?

 

SELECT CONCAT('100', '200');

 

이렇게 100200이 반환되기 위해선 CONCAT를 사용합니다.

PYTHON에서의 str함수를 씌운것과 같습니다.

 

논리 연산자 사용

SELECT 1 > '2mega';

(False의 0을 반환)

이렇게 문자열로 2mega로 작성한다고 해도 자동으로 정수 2로 변환해서 비교합니다.

 

숫자를 바꿔봐도 동일하게 나옵니다.

SELECT 3 > '3mega';

가장 앞에 숫자가 없으면 0이라고 판단합니다.

 

SELECT 0 = 'mega2';

True의 1 반환

 

SQL의 내장함수 조작

 

SELECT CASE 20
WHEN 1 THEN '일'
WHEN 5 THEN '오'
WHEN 10 THEN '십'
ELSE '모름'
END AS 'CASE 연습';

이렇게 파이썬에서의 IF문 처럼 SQL에서도 SELECT와 WHEN을 조합해서

사용합니다.

 

CONCAT_WS - CONCAT의 변형

 

SELECT CONCAT_WS('/', '2023', '02', '03');

간단하게 CONCAT_WS('기호', '문자열1', '문자열2'...)로서 기호를 구분자로 하여 문자열 사이에 넣어 반환해줍니다.

 

ASCII, CHAR

 

SELECT ASCII('A'), CHAR(65);

 

Open value in viewer 에서 확인

 

ASCII는 해당 문자의 아스키 코드값을 돌려줍니다.

CHAR는 해당 아스키 코드값에 있는 문자를 돌려줍니다.

 

이 함수는 평소에 사용할 일이 있을지 모르겠습니다.

아스키는 파이썬에서는 알고리즘 풀이에서 사용하는 경우가 종종 있었습니다.

SQL에서는 딱히 주소값을 찾아서 돌아갈 일이 있을지 모르겠습니다.

 

BIT_LENGTH, CHAR_LENGTH, LENGTH

 

SELECT BIT_LENGTH('A'),  CHAR_LENGTH('AB'), LENGTH('BOT');

BIT_LENGTH는 저장소에 할당된 Bit의 크기를 보여줍니다.

현재는 72bit가 저장되어 있습니다.

 

CHAR_LENGTH는 문자의 갯수를 반환합니다.

파이썬에서의 len()과 똑같습니다.

 

LENGTH는 할당된 byte의 수를 반환해줍니다.

 

ELT, FIELD, FINDE_IN_SET, INSTR, LOCATE

 

SELECT ELT(2, '하나', '둘', '셋'), FIELD('둘', '하나', '둘', '셋'), FIND_IN_SET('둘', '하나,둘,셋'), INSTR('하나둘셋', '둘'), LOCATE('둘', '하나둘셋');

파이썬의 인덱싱, 슬라이싱과 정말 비슷합니다.

ELT는 맨앞에 온 숫자의 주소값을 저장하고, 다음번에 오는 문자열 중에서 찾아 해당하는 값을 반환합니다. (둘)

FIELD는 맨앞에 온 값을 저장하고, 다음번에 오는 문자열 중에서 찾아 주소값을 반환합니다.(2)

FIND_IN_SET은 FIELD와 동일한 기능이지만 문자열 리스트가 , 로 구분되어 있어야 하고, 공백도 없어야합니다.(2)

INSTR은 모두 붙어있는 문자열에서 찾는 문자열의 시작 위치를 반환합니다(3)

LOCATE는 INSTR처럼 문자열의 시작위치를 반환하는데, 찾는 문자열이 먼저 옵니다(3)

 

이번 시간은 여기까지입니다!

728x90