SQL 기본(9): 문자열, NULL 값 관련 함수
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'