MySQL 문자열 함수

·2024년 3월 28일
0

MySQL

목록 보기
2/14
post-thumbnail

MySQL 문자열 함수

CONCAT();

-- CONCAT(x, y, z) 각 행의 데이터를 합쳐서 결과를 보고싶을 때, 사용한다.
SELECT CONCAT(author_fname, " ", author_lname) AS author_name FROM books;

-- CONCAT_WS(구분자 자리, 텍스트, 텍스트) WS === "With Separator"
-- 행 데이터가 끝날 때, 구분자가 들어감.
-- ⭐️해당 문자열 함수를 이용하면 url의 일부를 생성하는 데에 사용할 수 있음.

SELECT CONCAT_WS(" ", author_fname, author_lname, "작가님") AS ws_name FROM books;

SUBSTRING();

긴 문자열을 취해서 작은 문자열로 반환하는 함수
Ex ) 처음에 나오는 5개의 문자, 마지막 문자 or 중간에 있는 10개 글자
SUBSTR()과 동일함. SUBSTRING() 축약버전

-- SUBSTRING(문자열 인자, start, length);
-- 1번째는 1이다. 0이 안디ㅏ.
SELECT SUBSTRING("Hello World", 2, 4) AS returnValue;

--returnValue "ello"


-- start자리를 비우고, 길이만 기입하면 그 지점부터 시작해서 문자 끝까지 나온다.
SELECT SUBSTRING("Hello World", 7) AS emptyStart;

--emptyStart "World"

-- "-" 부호를 붙히면, 문자열 맨 끝에서 역으로 접근이 가능하다.
SELECT SUBSTRING("Hello World", -3) AS reverse;
--reverse "rld" (문자열 맨 끝에서 3개만을 추출)

SELECT SUBSTRING(author_lname, 1, 1 ) AS initial, author_lname AS lastName FROM books;

CONCAT()과 SUBSTR()을 결합하여 사용

SELECT CONCAT_WS("...",SUBSTR(title, 1, 10), "")  AS short_title FROM books;

SELECT CONCAT(SUBSTR(title, 1, 10), "...")  AS short_title FROM books;


-- J, L 작가의 첫 이니셜만 가져오기

-- SELECT SUBSTR(author_fname, 1, 1) FROM books;
-- SELECT SUBSTR(author_lname, 1, 1) FROM books;

SELECT CONCAT_WS("﹒", SUBSTR(author_fname, 1, 1), SUBSTR(author_lname, 1, 1)) AS initialName FROM books;

REPLACE();

문자열의 일부를 다른 대체 문자열로 변경할 수 있음.
해당 함수를 사용하여도, ⭐️ 테이블의 내용을 영구적으로 변경하지 않음.⭐️

REPLACE(str,from_str,to_str)

SELECT REPLACE("박민수그는감히전설이라이야기할수있다", "박민수", "김첨지") AS replaceText;
-- replaceText  : 김첨지그는감히전설이라이야기할수있다

REVERSE();

어떤 문자열이든 반대로 출력하는 문자열 함수.

SELECT REVERSE('고소한 커피');
-- 피커 한고소

SELECT REVERSE(NULL);
-- NULL 반환

SELECT REVERSE('NULL');
-- LLUN 반환. 문자열로 인식하기 때문.

-- 정방향과 역방향을 병합하여 출력
SELECT CONCAT(author_fname, "-", REVERSE(author_fname)) AS returnValue FROM books;

CHAR_LENGTH();

주어진 문자열에 있는 글자 수를 알려주는 문자열 함수.
Return number of characters in argument

SELECT CHAR_LENGTH("length check plz");
-- 16

SELECT CHAR_LENGTH(title) AS titleLength, title AS titleName  FROM books;

LENGTH()와의 차이?

  • 동일하게 문자열의 길이를 반환함.
  • 바이트 단위로 측정된 값을 반환함.

SQL에서 CHAR_LENGTH() 함수는 문자열의 길이를 문자 수로 반환합니다. 이는 유니코드 문자열에서의 길이를 측정합니다. 그에 반해 LENGTH() 함수는 바이트 단위로 문자열의 길이를 반환합니다.

영어 알파벳과 숫자와 같은 일부 문자는 하나의 바이트로 표현될 수 있지만, 유니코드 문자 또는 멀티바이트 문자는 더 많은 바이트를 차지할 수 있습니다. 이러한 경우 CHAR_LENGTH()와 LENGTH() 함수의 결과가 다를 수 있습니다.

따라서 이 두 함수는 동일한 용도로 사용할 수 있는 것이 아니며, 사용 시에는 문자열의 종류와 저장 방식에 따라 적절한 함수를 선택해야 합니다.

예를 들어, 한국어나 중국어와 같은 멀티바이트 문자가 포함된 문자열을 다룰 때는 CHAR_LENGTH() 함수를 사용하는 것이 더 적합할 것입니다. 반면에 바이너리 데이터와 같이 각 바이트가 중요한 경우에는 LENGTH() 함수를 사용하는 것이 적합할 것입니다.

요약
1️⃣ 바이트 수에 상관없이 글자 수만 알고싶다. ➡️ CHAR_LENGTH()
2️⃣ 바이트 수를 알아야하는 상황이다. ➡️ LENGTH()

UPPER(), LOWER();

각각 대 / 소문자로 변환시켜주는 문자열 함수.
축약 버전으로 UCASE();대문자, LCASE();소문자 가 있다.

SELECT UCASE("big sale");
-- BIG SALE

SELECT LCASE("U FIRED");
-- u fired

SELECT UCASE(title) AS upperTitle FROM books;
SELECT CONCAT(LCASE(author_fname), "-", LCASE(author_lname)) AS lowerFullName FROM books;

INSERT();

더 큰 문자열에 일부 하위 문자열을 삽입할 수 있게 해준다.
반드시 더 큰 문자열일 필요는 없다.
특정 문자열에 다른 문자열을 삽입하는 것이다.

INSERT(str,pos,len,newstr)
SELECT INSERT('안녕하세요. 홍길동님', 7, 0, " 좋은 아침입니다." );
-- 안녕하세요. 좋은 아침입니다. 홍길동님

SELECT INSERT('안녕하세요. 홍길동님', 8, 3, author_fname) FROM books;
-- 작가의 firstName으로 홍길동 텍스트를 대체하여 출력

LEFT(); RIGHT();

일부 문자열에서 가장 왼쪽 or 오른쪽에 있는 글자를 가져오는 데 사용하는 문자열 함수.

SELECT LEFT("해물파전에김치전에막걸리에등산에백숙묵자했잖아", 4);
-- 해물파전
SELECT RIGHT("해물파전에김치전에막걸리에등산에백숙묵자했잖아", 7);
-- 백숙묵자했잖아

REPEAT();

특정 문자열을 취해서 숫자만큼 반복한 결과값을 반환하는 문자열 함수.

REPEAT(str,count)
SELECT REPEAT("저요", 6);
-- 저요저요저요저요저요저요

TRIM();

선행과 후행에 있는 공백 문자를 제거할 수 있는 문자열 함수.
RTRIM(), LTRIM(), TRIM()이 있다.
각각의 함수로 제거하려는 공백 방향을 정할 수 있음.

해당 함수로 특정 문자열을 제거할 수도 있다.

SELECT TRIM('  bar   ');
        -> 'bar' (단순 공백 제거)
SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
        -> 'barxxx' (선행에 있는 x 문자를 제거)
SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
        -> 'bar' (양쪽에 있는 x 문자를 제거)
SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
        -> 'barx' (후행에 있는 xyz 문자를 제거)
profile
- 배움에는 끝이 없다.

0개의 댓글