DATABASE/Theory

[SQL] λ¬Έμžμ—΄ ν•¨μˆ˜(1)

ITs Min 2023. 12. 31. 11:27

πŸ” CONCAT

SQLμ—μ„œ CONCAT ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ„ κ²°ν•©ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μ΄λ‹€. 이 ν•¨μˆ˜λŠ” 두 개 μ΄μƒμ˜ λ¬Έμžμ—΄μ„ ν•˜λ‚˜μ˜ λ¬Έμžμ—΄λ‘œ ν•©μΉ˜λŠ” 데에 쓰이며, κ°„λ‹¨ν•œ λ°©λ²•μœΌλ‘œ λ¬Έμžμ—΄μ„ μ—°κ²°ν•  수 μžˆλ‹€. CONCAT ν•¨μˆ˜λŠ” 일반적으둜 λ‹€μŒκ³Ό 같은 ν˜•μ‹μ„ κ°€μ§„λ‹€.

-- κΈ°λ³Έ ν˜•μ‹
CONCAT(string1, string2, ...)

-- CONCAT ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 두 λ¬Έμžμ—΄μ„ κ²°ν•©ν•˜λŠ” 예제
SELECT CONCAT('Hello', ' ', 'World') AS Result;

-- λ³€μˆ˜λ‚˜ μ—΄μ˜ 값을 κ²°ν•©
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;

-- || μ—°μ‚°μžλ₯Ό λ¬Έμžμ—΄μ„ κ²°ν•©ν•˜λŠ” 데에 μ‚¬μš©
SELECT first_name || ' ' || last_name AS full_name
FROM employees;

πŸ” CAST, CONVERT

CAST와 CONVERT ν•¨μˆ˜λŠ” 데이터 ν˜•μ‹μ„ λ³€ν™˜ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μ΄λ‹€. 이 두 ν•¨μˆ˜λŠ” 기본적으둜 λ™μΌν•œ λͺ©μ μ„ κ°€μ§€κ³  있으며, 데이터λ₯Ό ν•œ ν˜•μ‹μ—μ„œ λ‹€λ₯Έ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•  λ•Œ μœ μš©ν•˜λ‹€. κ·ΈλŸ¬λ‚˜ 각 λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ— 따라 문법이 μ•½κ°„ λ‹€λ₯Ό 수 μžˆλ‹€.

-- κΈ°λ³Έ ν˜•μ‹
CAST(expression AS data_type)

-- μ •μˆ˜λ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜
SELECT CAST(123 AS VARCHAR) AS result;

 

CONVERT ν•¨μˆ˜λŠ” νŠΉμ • λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜λ‘œ, 문법이 CAST와 μœ μ‚¬ν•˜μ§€λ§Œ λ°μ΄ν„°λ² μ΄μŠ€μ— 따라 μ•½κ°„ λ‹€λ₯Ό 수 μžˆλ‹€.

-- κΈ°λ³Έ ν˜•μ‹
-- data_type은 λ³€ν™˜ν•˜λ €λŠ” 데이터 ν˜•μ‹, expression은 
-- λ³€ν™˜ν•˜λ €λŠ” κ°’μ΄λ‚˜ μ—΄, style은 λ‚ μ§œ 및 μ‹œκ°„ 데이터 ν˜•μ‹μ˜ 경우 μ„œμ‹μ„ μ§€μ •ν•˜λŠ” 데 μ‚¬μš©
CONVERT(data_type, expression, style)

-- ν™œμš©μ˜ˆμ‹œ
SELECT CONVERT(VARCHAR, 123) AS result;

-- λ‚ μ§œλ₯Ό λ¬Έμžμ—΄λ‘œ λ³€ν™˜
SELECT CONVERT(VARCHAR, GETDATE(), 120) AS result;

πŸ” ISNULL, COALESCE 

ISNULL ν•¨μˆ˜λŠ” Microsoft SQL Serverμ—μ„œ μ‚¬μš©λ˜λ©°, NULL인 경우 λŒ€μ²΄ 값을 λ°˜ν™˜ν•œλ‹€.

-- κΈ°λ³Έν˜•μ‹
-- expression은 평가할 값이고, replacement_valueλŠ” expression이 NULL인 경우 λ°˜ν™˜ν•  κ°’
ISNULL(expression, replacement_value)

-- ν™œμš©μ˜ˆμ‹œ
SELECT ISNULL(column_name, 'No Value') AS result
FROM table_name;

-- μœ„ μΏΌλ¦¬λŠ” νŠΉμ • μ—΄μ˜ 값이 NULL인 경우 'No Value'λ₯Ό λ°˜ν™˜

 

COALESCE ν•¨μˆ˜λŠ” ν‘œμ€€ SQLμ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜λ‘œ, μ—¬λŸ¬ 인수 μ€‘μ—μ„œ 첫 번째둜 NULL이 μ•„λ‹Œ 값을 λ°˜ν™˜ν•œλ‹€.

-- κΈ°λ³Έν˜•μ‹
-- value1, value2, ..., valueN은 평가할 μ—¬λŸ¬ 값이고, COALESCEλŠ” NULL이 μ•„λ‹Œ 첫 번째 값을 λ°˜ν™˜
COALESCE(value1, value2, ..., valueN)

-- ν™œμš©μ˜ˆμ‹œ
SELECT COALESCE(column_name, 'No Value') AS result
FROM table_name;

ISNULLκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ, μœ„ μΏΌλ¦¬λŠ” νŠΉμ • μ—΄μ˜ 값이 NULL인 경우 'No Value'λ₯Ό λ°˜ν™˜

πŸ” LOWER, UPPER

LOWER ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ˜ λͺ¨λ“  문자λ₯Ό μ†Œλ¬Έμžλ‘œ λ³€ν™˜ν•œλ‹€.

-- κΈ°λ³Έν˜•μ‹
-- string은 μ†Œλ¬Έμžλ‘œ λ³€ν™˜ν•˜λ €λŠ” λ¬Έμžμ—΄
LOWER(string)

-- ν™œμš©μ˜ˆμ‹œ
SELECT LOWER('Hello World') AS result;

-- 'Hello World' λ¬Έμžμ—΄μ„ λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ λ³€ν™˜ν•˜μ—¬ 'hello world'λ₯Ό λ°˜ν™˜

 

UPPER ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ˜ λͺ¨λ“  문자λ₯Ό λŒ€λ¬Έμžλ‘œ λ³€ν™˜ν•œλ‹€.

-- κΈ°λ³Έν˜•μ‹
UPPER(string)

-- ν™œμš©μ˜ˆμ‹œ
SELECT UPPER('Hello World') AS result;

-- 'Hello World' λ¬Έμžμ—΄μ„ λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ λ³€ν™˜ν•˜μ—¬ 'HELLO WORLD'λ₯Ό λ°˜ν™˜

πŸ” LTRIM, RTRIM, 및 TRIM

SQLμ—μ„œλŠ” LTRIM, RTRIM, 및 TRIM ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄μ˜ 쒌츑, 우츑 끝 λ˜λŠ” μ–‘μͺ½ λμ—μ„œ κ³΅λ°±μ΄λ‚˜ λ‹€λ₯Έ μ§€μ •λœ 문자λ₯Ό μ œκ±°ν•  수 μžˆλ‹€.

 

LTRIM, RTRIMν•¨μˆ˜λŠ” 각각 λ¬Έμžμ—΄μ˜ 쒌츑과 우츑 λμ—μ„œ κ³΅λ°±μ΄λ‚˜ λ‹€λ₯Έ μ§€μ •λœ 문자λ₯Ό μ œκ±°ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

-- κΈ°λ³Έν˜•μ‹
LTRIM(string)
RTRIM(string)


-- ν™œμš©μ˜ˆμ‹œ
SELECT LTRIM('   Hello World   ') AS result;
SELECT RTRIM('   Hello World   ') AS result;


-- Hello World ' λ¬Έμžμ—΄μ˜ 쒌츑 ν˜Ήμ€ μš°μΈ‘μ— μžˆλŠ” 곡백을 μ œκ±°ν•˜μ—¬ 'Hello World 'λ₯Ό λ°˜ν™˜

 

TRIM ν•¨μˆ˜λŠ” λ¬Έμžμ—΄μ˜ μ–‘μͺ½ λμ—μ„œ κ³΅λ°±μ΄λ‚˜ λ‹€λ₯Έ μ§€μ •λœ 문자λ₯Ό μ œκ±°ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

-- κΈ°λ³Έν˜•μ‹
-- leading, trailing, bothλŠ” 각각 쒌츑, 우츑, μ–‘μͺ½μ„ 의미
-- trim_characterλŠ” μ œκ±°ν•  문자λ₯Ό μ§€μ •
TRIM([leading | trailing | both] [trim_character FROM] string)

-- ν™œμš©μ˜ˆμ‹œ
SELECT TRIM('   Hello World   ') AS result;

--' Hello World ' λ¬Έμžμ—΄μ˜ μ–‘μͺ½μ— μžˆλŠ” 곡백을 μ œκ±°ν•˜μ—¬ 'Hello World'λ₯Ό λ°˜ν™˜

πŸ” LEN

LEN ν•¨μˆ˜λŠ” SQLμ—μ„œ λ¬Έμžμ—΄μ˜ 길이(문자 수)λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. 이 ν•¨μˆ˜λŠ” 주둜 λ¬Έμžμ—΄μ˜ 길이λ₯Ό ν™•μΈν•˜κ±°λ‚˜ λ¬Έμžμ—΄μ˜ 일뢀λ₯Ό μΆ”μΆœν•˜λŠ” 데 μ‚¬μš©λœλ‹€. LEN ν•¨μˆ˜λŠ” 각 λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ μ‘°κΈˆμ”© λ‹€λ₯Ό 수 μžˆμ§€λ§Œ, 일반적인 μ‚¬μš© ν˜•μ‹μ€ λ‹€μŒκ³Ό κ°™λ‹€.

-- κΈ°λ³Έν˜•μ‹
-- string은 길이λ₯Ό ν™•μΈν•˜λ €λŠ” λ¬Έμžμ—΄
LEN(string)

-- ν™œμš©μ˜ˆμ‹œ
SELECT LEN('Hello World') AS string_length;

-- 'Hello World' λ¬Έμžμ—΄μ˜ 길이λ₯Ό ν™•μΈν•˜μ—¬ 결과둜 11을 λ°˜ν™˜

πŸ” CHARINDEX

CHARINDEX ν•¨μˆ˜λŠ” SQLμ—μ„œ λ¬Έμžμ—΄μ—μ„œ νŠΉμ • 문자 λ˜λŠ” λΆ€λΆ„ λ¬Έμžμ—΄μ˜ 첫 번째 λ°œμƒ μœ„μΉ˜λ₯Ό μ°ΎλŠ” 데 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. 이 ν•¨μˆ˜λŠ” μΌμΉ˜ν•˜λŠ” 문자 λ˜λŠ” λΆ€λΆ„ λ¬Έμžμ—΄μ΄ λ¬Έμžμ—΄ λ‚΄μ—μ„œ 어디에 μœ„μΉ˜ν•˜λŠ”μ§€λ₯Ό μ•Œλ €μ€€λ‹€.

-- κΈ°λ³Έν˜•μ‹
-- substring: 찾고자 ν•˜λŠ” λΆ€λΆ„ λ¬Έμžμ—΄
-- string: 검색 λŒ€μƒμ΄ λ˜λŠ” λ¬Έμžμ—΄
-- start_location (선택적): 검색을 μ‹œμž‘ν•  μœ„μΉ˜ 
-- 이 λ§€κ°œλ³€μˆ˜λ₯Ό μƒλž΅ν•˜λ©΄ 검색은 λ¬Έμžμ—΄μ˜ μ²˜μŒλΆ€ν„° μ‹œμž‘
CHARINDEX(substring, string [, start_location])

-- ν™œμš©μ˜ˆμ‹œ
SELECT CHARINDEX('World', 'Hello World') AS position;

-- 'Hello World' λ¬Έμžμ—΄μ—μ„œ 'World'λΌλŠ” λΆ€λΆ„ λ¬Έμžμ—΄μ˜ μ‹œμž‘ μœ„μΉ˜λ₯Ό μ°Ύμ•„μ„œ 결과둜 7을 λ°˜ν™˜

πŸ” LEFT, RIGHT

LEFT 및 RIGHT ν•¨μˆ˜λŠ” SQLμ—μ„œ λ¬Έμžμ—΄μ„ μ‘°μž‘ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” ν•¨μˆ˜λ‘œ, 각각 λ¬Έμžμ—΄μ˜ μ™Όμͺ½ λ˜λŠ” 였λ₯Έμͺ½ 뢀뢄을 λ°˜ν™˜ν•œλ‹€.

-- κΈ°λ³Έν˜•μ‹
-- string: μ²˜λ¦¬ν•  λ¬Έμžμ—΄
-- length: λ°˜ν™˜ν•  문자의 길이
LEFT(string, length)
RIGHT(string, length)

-- ν™œμš©μ˜ˆμ‹œ
SELECT LEFT('Hello World', 5) AS result;
SELECT RIGHT('Hello World', 5) AS result;

-- 'Hello World' λ¬Έμžμ—΄μ—μ„œ μ™Όμͺ½ ν˜Ήμ€ 였λ₯Έμͺ½μ—μ„œλΆ€ν„° 5개의 문자λ₯Ό μΆ”μΆœν•˜μ—¬ 
-- 각각 'Hello', 'World'λ₯Ό λ°˜ν™˜