Summary

LENGTH, CHAR_LENGTH

MySQL에서 문자열의 길이를 가져올 때, 사용하는 것이 LENGTH함수입니다.

그렇지만, LENGTH 함수는 문자의 Byte길이를 가져오기 때문에 한글은 정확한 길이를 알 수 없습니다.

그래서 CHAR_LENGTH 함수를 사용합니다.

CHAR_LENGTH 함수는 문자의 Byte 수를 계산하지 않고 단순히 몇 개의 문자가 있는지를 가져오는 함수입니다.

* CHAR_LENGTH는 CHARACTER_LENGTH와 동의어입니다.

SELECT LENGTH('Hello');
## 5

SELECT LENGTH('안녕');
## 6

SELECT CHAR_LENGTH('Hello');
## 5

SELECT CHAR_LENGTH('안녕');
## 2

LPAD, RPAD

  • LPAD : 왼쪽에 특정문자를 원하는 자리수만큼 채워서 반환

SELECT LPAD(str, len, padstr);

SELECT LPAD('test', 6, '0');
## 00test

SELECT LPAD('test', 2, '0');
## te

SELECT LPAD('test', 9, '0');
## 00000test
  • RPAD : 오른쪽에 특정문자를 원하는 자리수만큼 채워서 반환

SELECT RPAD(str, len, padstr);

SELECT RPAD('test', 6, '0');
## test00

SELECT RPAD('test', 2, '0');
## te

SELECT RPAD('test', 9, '0');
## test00000

CONCAT

CONCAR(str1, str2, ...)

SELECT CONCAT('서울', 'sk ', 'knights!') name
FROM KBL;

UPPER, LOWER

UPPER(str)

SELECT UPPER('sk Knights');
## SK KINGHTS
  • LOWER(str)

SELECT LOWER('SK KNIGHTS');
## sk knights

REGEXP (Regular Expression, 정규 표현식)

# '길' 또는 '로" 또는 ''가 포함된 문자열을 찾고 싶을 때

# 정규표현식을 사용하지 않을 때
SELECT *
FROM tbl
WHERE data like '%길%'
OR data like '%로%'
OR data like '%그%'

# 정규표현식을 사용할 때
SELECT *
FROM tbl
WHERE data REGEXP '길|로|그'


# ‘안녕’ 또는 ‘하이’로 시작하는 문자열을 찾고 싶을 때

# 정규표현식을 사용하지 않을 때 
SELECT *
FROM tbl  
WHERE data LIKE '안녕%' OR data LIKE '하이%';

# 정규표현식을 사용할 때 
SELECT *
FROM tbl
WHERE data REGEXP ('^안녕|^하이');

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

# 길이 7글자인 문자열 중 2번째 자리부터 abc를 포함하는 문자열을 찾고 싶을 때

# 정규표현식을 사용하지 않을 때
SELECT *
FROM tbl
WHERE CHAR_LENGTH(data) = 7 AND SUBSTRING(data, 2, 3) = 'abc';

# 정규표현식을 사용할 때
SELECT *
FROM tbl
WHERE data REGEXP ('^.abc...$');

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

# 텍스트와 숫자가 섞여 있는 문자열에서 숫자로만 이루어진 문자열을 찾고 싶을 때

# 정규표현식을 사용하지 않을 때
SELECT *
FROM tbl
WHERE data LIKE ??????????

# 정규표현식을 사용할 때
SELECT *
FROM tbl
WHERE data REGEXP ('^[0-9]+$'); 
-- OR data REGEXP ('^\d$') 
-- OR data REGEXP ('^[:digit:]$');

SQL 해석 순서

SELECT (7)
FROM (1)
JOIN (3)
ON (2)
WHERE (4)
GROUP BY (5) 
HAVING (6)
ORDER BY (8)

SELECT

AS

  • Table과 Select 문에 사용할 수 있다.

WHERE

= , <, >, <=, >=, <>
IS NULL, IS NOT NULL
BETWEEN a AND b
LIKE, NOT LIKE

SELECT * 
FROM products 
WHERE name LIKE '___sk%';

SELECT * 
FROM products 
WHERE name NOT LIKE '___sk%';
IN, NOT IN 

SELECT * 
FROM products
WHERE team IN ('sk', 'kgc');

SELECT * 
FROM products
WHERE team NOT IN ('sk', 'kgc');

SELECT * 
FROM products
WHERE team IN (SELECT name AS team
               FROM teams);
ANY, ALL 

SELECT * 
FROM teams
WHERE winning > ANY(1, 3);

SELECT * 
FROM teams
WHERE winning > ALL(1, 3);

ORDER BY

SELECT name 
FROM teams
ORDER BY winning LIMIT 3;

숫자 계산

ABS(num)
CEIL(num)
FLOOR()
POW(x, y)
MOD(분자, 분모) : %
GREAST(num1, num2, num3, ...)
LEAST(num1, num2, num3, ...)
ROUND(num, 자릿수)
TRUNCATE(num, 자릿수)
VARIAN(num)
STDDEV(num)

Aggregate

COUNT(*), COUNT(col)
SUM(col)
MAX(col)
MIN(col)
AVG(col)

HAVING

SELECT col1, aggregate(col2)
FROM t
GROUP BY col1
HAVING condition;

SELECT COUNT(id) 
FROM products
GROUP BY team
HAVING COUNT(team) >= 5

EXISTS

CASE

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ELSE result
END;

SELECT Id, Sex, Name,
CASE
    WHEN Age >= 50 THEN 'group D'
    WHEN Age >= 40 THEN 'group C'
    WHEN Age >= 30 THEN 'group B'
    WHEN Age >= 20 THEN 'group A'
    ELSE 'Too Young'
END AS Group
FROM People;

IF

IF(조건, 참, 거짓)

JOIN

Union

NULL

IFNULL(home, "")

SubQuery

  • FROM 절에서 사용

  • WHERE, HAVING 절에서 사용

SELECT SUBSTR('abcdefg', 2, 4);

Left, Mid, Right

SELECT LEFT('abcdefg', 3);
## abc

SELECT MID('abcdefg', 2, 4);
-- SELECT SUBSTR('abcdefg', 2, 4);
-- SELECT SUBSTRING('abcdefg', 2, 4);
## bcde

SELECT RIGHT('abcdefg', 3);
## efg

DATE/TIME

YEAR(date), MONTH(date), DAT(date)
date_format(date, '%Y-%m-%d')
DATEDIFF(last_date, start_day) ## + 1

TRIM

SELECT TRIM(' aabbccbbaa ');
-- 또는 SELECT TRIM(BOTH FROM ' aabbccbbaa ');
## aabbccbbaa

SELECT TRIM(BOTH 'a' FROM 'aabbccbbaa');
## bbccbb

SELECT TRIM(LEADING FROM ' aabbccbbaa ');
## aabbccbbaa  .

SELECT TRIM(LEADING 'a' FROM 'aabbccbbaa');
## bbccbbaa

SELECT TRIM(TRAILING FROM ' aabbccbbaa ');
#  aabbccbbaa

SELECT TRIM(TRAILING 'a' FROM 'aabbccbbaa');
## aabbccbb

SELECT LTRIM(' aabbccbbaa ');
## aabbccbbaa  .

SELECT RTRIM(' aabbccbbaa ');
##   aabbccbbaa

String

CONCAT('A', 'B')
SUBSTRING('str', 1, 2)
REPLACE(price, ',', '')

Ref

Last updated