SQL/SQL 기본

SQL 기본(9): 문자열, NULL 값 관련 함수

민서타 2023. 9. 19. 11:20

1. 결합: Concat

-둘 이상의 문자열 값을 엔드 to 엔드 방식으로 연결 / 조인한 결과 문자열 반환

-최소 둘 이상의 문자열 값 인수와 254개 이하의 문자열 값 인수가 필요 / 둘 이상 값 없을 시 오류 발생

-Null 값을 빈 문자열로 암시적 변환 / Null 인수를 받을 시 varchar(1) 형식의 빈 문자열 반환

CONCAT(string_value1 [,string_value2[) SELECT CONCAT ('I', 'Love', 'SQL')

2. 형 변환: CAST, CONVERT

CAST(expression AS data_type [(length)]) #data_type: xml, bigint, sql_variant, length: 기본값 30
CONVERT(data_type[(length)], expression[, style]) #style: 식을 반환하는 방법, Null -> Null

3. NULL값 처리: ISNULL, COALESCE

ISNULL(check_exp, replace_value) #check값이 null 이면 replace_value 값 대입
COALESCE(check_exp, replace_value, replace_value ) #첫 번째 인자 값이 null일 때 다음 replace_value값 순차 대입

4. 대소문자, 공백 제거, 개수, 바이트: LOWER, UPPER, TRIM, LEN, DATALENGTH 

LOWER(exp): 소문자로
UPPER(exp): 대문자로
TRIM([characters FROM] string): 문자열 양쪽 공백 제거 # SELECT TRIM('.,!' FROM ' # Do it! SQL .')
LTRIM(): 문자열 왼쪽 공백 제거
RTRIM(): 문자열 오른쪽 공백 제거
LEN(exp): 문자열 개수, 공백이 있을 시 문자열 앞은 개수에 포함, 뒤는 포함하지 않음
DATALENGTH(exp): 문자열 길이의 바이트 반환

5. 문자열 반환: CHARINDEX, SUBSTRING, REPLACE, REPLICATE, REVERSE, STUFF, STR 

CHARINDEX (expToFind, expToSearch[, start_loc]) # 특정 문자까지의 길이 반환, 지정한 문자가 열에 없으면 0 반환
SUBSTRING
(exp, start, length) #지정한 범위의 문자열 반환
REPLACE
(str_exp, str_pattern, str_replacement) # 지정 문자를 다른 문자로 대체
REPLICATE (str_exp, integer_exp) # 지정한 문자를 반복
REVERSE (str_exp) # 문자열을 역순으로 표시
STUFF
(cha_exp, start, length, replace_exp) # 지정한 범위의 문자열 삭제, 새 문자열 삽입
STR(float_exp, [, length[, decimal]]) # 숫자를 문자열로 변환

--+, CONCAT, CAST, CONVERT

SELECT 'I ' + ' LOVE' + ' SQL'
--^CMC200 : CMC Crypto 200 Index by Solacti
SELECT CONCAT(symbol, ' : ', company_name) FROM DoItSQL.DBO.nasdaq_company

SELECT CAST(ipo_year AS nvarchar(50)) + ' ' + CAST(open_price AS nvarchar(50)) AS CAST_col
FROM DoItSQL.DBO.nasdaq_company

SELECT CONVERT(nvarchar(50), ipo_year) + ' ' + CONVERT(nvarchar(50), open_price) AS CONVERT_col
FROM DoItSQL.DBO.nasdaq_company
-- 문자열은 nvarchar 숫자만큼, 숫자열은 상승 오버 플로 발생가능(지정 수보다 클 때)

-- 데이터 우선순위: 문자+FLOAT -> FLOAT / ans = 2324.5
SELECT CONVERT(nvarchar(50), ipo_year) + ' ' + open_price AS CONVERT_pluscol
FROM DoItSQL.DBO.nasdaq_company WHERE symbol = 'MSFT'

--숫자 + 날짜 -> 날짜 -- 2027-04-14 00:00 / 문자 + 날짜 -> 날짜
SELECT ipo_year + last_crawel_date
FROM DoItSQL.DBO.nasdaq_company WHERE symbol = 'MSFT'

SELECT 
CAST(10.6496 AS INT) as TRUNC1, --10
CAST(-10.6496 AS INT) as TRUNC2, -- -10
CAST(10.6496 AS NUMERIC) as ROUND1, -- 11
CAST(-10.6496 AS NUMERIC) as ROUND2 -- -11

--ISNULL, COALESCE
SELECT symbol, ISNULL(sector, N'널값') AS 'ISNULL', open_price
FROM DoItSQL.DBO.nasdaq_company WHERE symbol ='DBA'

SELECT symbol, COALESCE(sector, industry, open_price) AS 'NULL', open_price
FROM DoItSQL.DBO.nasdaq_company WHERE symbol ='DBA'

반응형