7장. 데이터 생성, 조작과 변환
7.1 문자열 데이터 처리
char
- 고정 길이 문자열 자료형
- 지정한 크기보다 문자열이 작으면 나머지 공간을 공백으로 채움
- MySQL: 255글자
varchar
- 가변 길이 문자열 자료형
- 크기만큼 데이터가 들어오지 않으면 그 크기에 맞춰 공간 할당
- 헤더에 길이 정보가 포함
- MySQL 최대 65,536 글자 허용
text
- 매우 큰 가변 길이 문자열 저장
- MySQL: 최대 4 기가바이트 크기 문서 저장
- clob: 오라클 데이터베이스
테이블 생성

문자열 데이터를 테이블에 추가
- 문자열의 길이가 해당 열의 최대 크기를 초과하면 예외 발생


varchar 문자열 처리
- update문으로 vchar_fld열 (varchar(30))에 설정 길이보다 더 긴 문자열 저장
- MySQL 6.0 이전 버전: 문자열을 최대 크기로 자르고 경고 발생
- MySQL 6.0 이후 기본 모드는 strict 모드로 예외 발생됨


작은 따옴표 포함
- 문자열 내부에 작은 따옴표를 포함하는 경우 (I’m, doesn’t 등 )
- escape 문자 추가 방법
• 작은 따옴표를 하나 더 추가

• 백슬래시(‘\’) 문자 추가

작은 따옴표 포함
- quote() 내장 함수
- 전체 문자열을 따옴표로 묶고, 문자열 내부의 작은 따옴표에 escape문자를 추가

7.1.2 문자열 조작
length() 함수: 문자열의 개수를 반환

• char열의 길이: 빈 공간을 공백으로 채우지만, 조회할 때 char데이터에서 공백 제거

position() 함수

locate(‘문자열’, 열이름, 시작위치) 함수
- 시작 위치부터 문자열 검색: 처음 발견되는 인덱스 리턴

strcmp(‘문자열1’, ‘문자열2’) 함수: 문자열 비교
- 대소문자 구분 안함
• if 문자열1 < 문자열2, -1 반환: 정렬 순서에서 문자열1이 문자열2의 앞에 오는 경우
• if 문자열1 == 문자열2, 0 반환: 문자열이 동일
• if 문자열1 > 문자열2, 1 반환: 문자열1이 문자열2의 뒤에 오는 경우
- stringtbl 삭제 후 새로운 데이터 추가

strcmp() 예제
- 5개의 서로 다른 문자열 비교

SELECT 절에 LIKE 연산자나 REGEXP 연산자를 사용
• 0 또는 1의 값을 반환
-'y$' : name 칼럼의 값이 'y'로 끝나면 1을 반환

string_tbl 리셋

concat(): 문자열 추가 함수
- concat() 함수를 사용하여 stringtbl의 text_fld열에 저장된 문자열 수정
• 기존 text_fld의 문자열에 ', but now it is longer’ 문자열 추가

concat() 함수 활용
insert() 함수
- 4개의 인수로 구성
- insert(문자열, 시작위치, 길이, 새로운 문자열)
• 세 번째 인수값(길이)=0: 새로운 문자열이 삽입

• 세 번째 인수값 > 0: 해당 문자열로 교체

replace() 함수
- replace(문자열, 기존문자열, 새로운 문자열)
- 기존 문자열을 찾아서 새로운 문자열로 교체

substr() 또는 substring() 함수
- substr(문자열, 시작위치, 개수)
- 문자열에서 시작 위치에서 개수만큼 추출

7.2 숫자 데이터 처리
산술 함수

숫자 자릿수 관리
-
ceil() 함수: 가장 가까운 정수로 올림
• ceil(72.445) = 73
-
floor() 함수: 가장 가까운 정수로 내림
• floor(72.445) = 72
-
round() 함수: 반올림
• 소수점 자리를 정할 수 있음
• round(72.0909, 1) = 72.1
• round(72.0909, 2) = 72.09

-
truncate(숫자, 자릿수) 함수: 자릿수 아래를 버림
• truncate(72.0956, 1) = 72.0
• truncate(72.0956, 2) = 72.09
• truncate(72.0956, 3) = 72.095

sign()함수
- 값이 음수이면 -1, 0이면 0, 양수이면 1을 반환

7.3 시간 데이터 처리
시간대(time zone)처리
- 24개의 가상 영역으로 분할
- 협정 세계표준시(UTC: Universal Time Coordinated) 사용
- utc_timestamp() 함수 제공
시간 데이터 생성 방법
- 기존 date, datetime 또는 time 열에서 데이터 복사
- date, datetime 또는 time을 반환하는 내장 함수 실행
- 서버에서 확인된 시간 데이터를 문자열로 표현

시간 데이터의 문자열 표시
- datetime 기본 형식: YYYY-MM-DD HH:MI:SS
- datetime 열을 2022년 8월 1일 오전 09:30 으로 표현
• ‘2022-08-01 09:30:00’ 의 문자열로 구성
- MySQL 서버의 시간 데이터 처리
• datetime 형식으로 표현된 문자열에서 6개의 구성요소를 분리해서 문자열을 변환
- cast() 함수
- 지정한 값을 다른 데이터 타입으로 변환
- cast() 함수를 이용해서 datetime값을 반환하는 쿼리 생성

cast() 함수
- date 값과 time 값을 생성

MySQL의 문자열을 이용한 datetime 처리
- MySQL은 날짜 구분 기호에 관대
• 2019년 9월 17일 오후 3시 30분에 대한 유효한 표현 방식

날짜 생성 함수
- strto_date(str, format)
• 형식 문자열의 내용에 따라 datetime, date 또는 time값을 반환
• cast() 함수를 사용하기에 적절한 형식이 아닌 경우 사용
• ‘September 17, 2019’ 문자열을 date 형식으로 변환- str(문자열)의 형식에 맞춰 format을 설정

- %M: 월 이름 (January ~ December)
- %d: 숫자로 나타낸 월(01 ~ 12)
- %Y: 연도, 4자리 숫자

- 시간 문자열을 time값으로 변환

현재 날짜/시간 생성
- 내장 함수가 시스템 시계를 확인해서 현재 날짜 및 시간을 문자열로 반환
- CURRENTDATE(), CURRENT_TIME(), CURRENT_TIMESTAMP()

날짜를 반환하는 시간 함수
기간 자료형

날짜를 반환하는 시간 함수
문자열을 반환하는 시간 함수
- dayname(date) 함수
• 해당 날짜의 영어 요일 이름을 반환

문자열을 반환하는 시간 함수
- extract() 함수
• date의 구성 요소 중 일부를 추출
• 기간 자료형으로 원하는 날짜 요소를 정의

숫자를 반환하는 시간 함수
- datediff(date1, date2) 함수
• 두 날짜 사이의 기간(년, 주, 일)을 계산
• 시간 정보는 무시

변환 함수
- cast() 함수
• 데이터를 한 유형에서 다른 유형으로 변환할 때 사용
• cast(데이터 as 타입)

7.1
7.1