sue
  • SQL string functions
    2020년 11월 07일 13시 53분 06초에 업로드 된 글입니다.
    작성자: sue24

    SQL문 중에 스트링과 관련된 기능들에 대해 알아보겠습니다.

     

    https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

     

    MySQL :: MySQL 8.0 Reference Manual :: 12.8 String Functions and Operators

    12.8 String Functions and Operators Table 12.12 String Functions and Operators Name Description ASCII() Return numeric value of left-most character BIN() Return a string containing binary representation of a number BIT_LENGTH() Return length of argument

    dev.mysql.com

    스트링 관련한 기능들은 위 문서에서 확인하실 수 있습니다.

     

     

    이 글에서는

     

    CONCAT, SUBSTRING, REPLACE, REVERSE, CHAR_LENGTH, UPPER, LOWER 

     

    이렇게 일곱 가지 기능에 대해서 서술하겠습니다.

     

    스트링을 가지고 어떤 기능을 하든지 출력된 결과를 보려면

     

    조회를 하는 SELECT를 써야 합니다.

     

    1. CONCAT

        CONCAT은 여러 개의 인자를 합쳐서 결과를 출력해줍니다.

        

     

        CONCAT(a, b);

        이렇게 하면 a+b를 만드는 거죠.

        a와 b 사이에 띄어쓰기는 들어가지 않으므로

        띄어쓰기가 필요하면 CONCAT(a, ' ', b); 이런 식으로 써야 합니다.

        CONCAT(컬럼1, 컬럼2) FROM 테이블 이름;

        CONCAT(컬럼1, '의 값에', 컬럼2, '의 값을 더한다.') FROM 테이블 이름;

        이런 식으로 컬럼들을 더할 수도 있습니다.

        컬럼을 이용할 때는 당연히 컬럼이 위치한 테이블 이름을 써줘야 합니다.

        컬럼 값 사이에 스트링을 추가해서 출력할 수도 있습니다.

        조회할 것의 이름이 CONCAT() 이런 식으로 나오니까 너무 복잡하네요

        이걸 단순하게 하려면 AS를 써야 합니다.

     

        SELECT CONCAT(컬럼 이름, 컬럼 이름) AS '보일 이름' FROM 테이블 이름;

        CONCAT으로 만든 컬럼도 하나의 컬럼으로 취급되기 때문에

        여러 개의 컬럼을 조회할 때는

        

       SELECT 컬럼 이름, 컬럼 이름, CONCAT() FROM 테이블 이름;

       이런 식으로 보통과 똑같이 컴마를 사용해서 구분해줍니다.

       

    CONCAT_WS

        CONCAT_WS는 concat with separator의 줄임말입니다.

        

        여러 텍스트를 합쳐주는데 각 텍스트 사이에 세퍼레이터를 삽입해서 출력합니다.

     

        세퍼레이터를 먼저 쓰고, 그 뒤로 열거하는 텍스트/컬럼들 사이에 세퍼레이터를 적용합니다.

     

        SELECT CONCAT(title, '-', author_fname, '-', author_lname) FROM books;

     

        SELECT CONCAT_WS('-', title, author_fname, author_lname) FROM books;

     

        위 두 SQL문은 같은 역할을 합니다.

     

     

        SELECT CONCAT_WS('->', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');

        => Monday->Tuesday->Wednesday->Thursday->Friday->Saturday->Sunday

     

    2. SUBSTRING

        SUBSTRING은 스트링의 일부를 떼어낼 수 있게 해 줍니다.

     

        SELECT SUBSTRING('Hello World', 1, 4);

        => Hell

        문자의 첫번째부터 네 번째까지를 출력합니다.

        SQL에서는 인덱스가 0이 아닌 1부터 시작합니다.

     

        SELECT SUBSTRING('Hello World', 7);

        => World

        7번째부터 끝까지

     

        SELECT SUBSTRING('Hello World', -3);

        => rld

        마지막 글자부터 3개

     

        SUBSTRING이 아니라 SUBSTR이라고 써도 동작합니다.

     

        SELECT CONCAT(

            SUBSTRING(title, 1, 10),

            '...'

           ) AS 'short title'

        FROM books;

        이런 식으로 CONCAT과 함께 이용하면 좋겠죠.

     

    3. REPLACE

        스트링의 일부를 바꿀 수 있게 해 줍니다.

     

        대소문자를 구별합니다.

     

        SELECT REPLACE('original text', 'original', 'modified');

        => modified text

     

        SELECT REPLACE('Hello World', 'l', '7');

        SELECT REPLACE('Hello World', 'l', 7);

        => He77o Wor7d

        숫자는 꼭 ''안에 넣지 않아도 됩니다.

     

        SELECT REPLACE('Ohio', 'o', 0);

        => Ohi0

        소문자 o만 0으로 바뀌고 대문자는 바뀌지 않습니다.

     

        SELECT SUBSTRING(

            REPLACE(title, 'e', 3),

            1, 10

            ) AS 'weird title'

        FROM books;

        replace 다음에 ,를 넣어야 합니다.

        replace한 것을 substring으로 나누는 작업이기 때문이에요.

     

    4. REVERSE

        스트링을 역순으로 출력합니다.

        

        SELECT REVERSE('Hello World');

        => dlroW olleH

     

        SELECT CONCAT('text', REVERSE('test'));

        => texttxet

        이런 식으로 회문(palindrome)을 만들 수도 있어요!

     

    5. CHAR_LENGTH

       스트링의 글자 수를 세 줍니다.

     

       SELECT CHAR_LENGTH('Hello World');

        => 11

     

        SELECT CONCAT(

            title, ' is ', CHAR_LENGTH(title), ' characters long.'

            ) AS 'title's length'

        FROM books;

     

    6. UPPER & LOWER

        스트링의 대소문자를 바꿉니다.

     

        SELECT UPPER('Hello World');

        => HELLO WORLD

     

        SELECT LOWER('Hello World');

        => hello world

     

        SELECT UPPER(CONCAT(firstname, ' ', lastname)) AS 'full name' FROM names;

        UPPER 안에 CONCAT이 와야 해요.(반대는 에러)

        UPPER는 하나의 인자만 받지만 CONCAT은 두 개 이상의 인자를 받기 때문입니다.

     

        SELECT CONCAT(UPPER(firstname), ' ', UPPER(lastname)) AS 'full name' FROM names;

        물론 이런 식으로 써도 되지만 그럼 UPPER를 두 번 써야 하니까

        위처럼 UPPER 안에 CONCAT을 써 주세요.

     

        같은 이유로 UPPER과 REVERSE는 순서를 바꿀 수 있습니다.

    'SQL' 카테고리의 다른 글

    데이터모델링의 이해  (0) 2022.03.17
    44회 SQLD  (0) 2022.03.15
    SQL 더 나은 SELECT를 위하여  (0) 2020.11.08
    SQL CRUD  (0) 2020.11.04
    SQL 기본  (0) 2020.11.02
    댓글