반응형
날짜와 시간
날짜와 시간은 date 와 string 을 왔다갔다 하므로 잘 비교해줘야 한다.
날짜를 문자형 형태로 비교하기 위해서는 date 타입을 string으로 변환
TO_CHAR() 함수를 이용
WHERE '20220115' > TO_CHAR(date, 'YYYY') as Year -> 2022
WHERE '20220115' > TO_CHAR(date, 'mm') as month -> 01
WHERE '20220115' > TO_CHAR(date, 'YYYY') as day -> 15
string 형태를 date 형태로 비교하고 싶은 경우
TO_DATE() 함수를 이용
WHERE SYSDATE > TO_DATE('20220115', 'YYYY-MM-DD') -> 2022-01-15
함수 | 내용 |
---|---|
DATE_FORMAT(날짜, 'FORMAT') | 날짜를 해당 포멧으로 변환 |
DATE(날짜) | 날짜를 '연도-월-일'로 변환 |
YEAR(날짜) | 날짜의 연도 반환 |
MONTH(날짜) | 날짜의 월 반환 |
날짜와 문자열
데이터베이스를 사용하다면 날짜를 문자열로 또는 문자를 날짜로 바꿀 때가 있다
오라클에서 사용하는 함수
숫자 또는 날짜 데이터 → 문자형
TO_CHAR(데이터, '출력 형식')
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')
-- 오늘 날짜의 출력 형식을 결정해서 문자로 리턴
SELECT TO_CHAR(100000, '00000000')
다음은 문자→ 날짜형으로 변환
TO_DATE(데이터, '날짜 형식')
SELECT TO_DATE('20080101', 'YYYY/MM/DD')
-- 20080101이라는 문자를 2008/01/01의 형태의 날짜로 리턴
MYSQL에서 사용하는 함수
날짜→ 문자열
DATE FORMAT(날짜, 출력 형식)을 사용한다
SELECT DATE_FORMAT('2019-09-16 20:23:12', '%Y/%M/%D')
-- 2019/09/16 출력
문자열을 날짜로 변환할 때는
STR_TO_DATE(문자, 출력 형식)
SELECT STR_TO_DATE('20080101', '%Y-%M-%D')
-- 20080101이라는 문자를 2008-01-01의 형태의 날짜로 리턴
MSSQL
날짜→ 문자
CONVERT(포맷(길이), 날짜, 변환 형식)
SELECT CONVERT(VARCHAR, GETDATE(), 120)
-- 결과 : 2019-09-15 15:30:11
120은 YYYY-MM-DD HH24:MI:SS 형식이다
문자 → 날짜
CONVERT(날짜 형식, 문자)
SELECT CONVERT(DATE, '2008-01-01')
-- 2008-01-01 문자가 날짜로 변경된다
SELECT CONVERT(DATETIME, '2008-01-01 15:14:13')
-- 2008-01-01 15:14:13 문자가 날짜/시간으로 변경된다
1. 정규 표현식 이란?
- 특정한 조건의 문자를 ‘
검색
’하거나 ‘치환
’하는 과정을 매우 간편하게 처리할 수 있도록 해주는 수단- 해당
Pattern
과 일치하는 문자열을 검색하는 것 - = 대상 문자열에 정규표현식을 적용해서 찾을 문자열을 검색해내는 것
- 해당
RegexOne - Learn Regular Expressions - Lesson 7: Mr. Kleene, Mr. Kleene
- 튜토리얼하면서 REGEXP 익히기 가능
2. 패턴의 종류
Matching
Pattern | 기능 | 예시 | 설명 |
---|---|---|---|
. | 문자 하나 | "..." | 문자열의 길이가 세 글자 이상인 것을 찾음. |
I(수직선) | 또는 (OR). I(수직선)로 구분된 문자에 해당하는 문자열을 찾음. | "데이터I(수직선)데이타" | ‘데이터’ 또는 ‘데이타’에 해당하는 문자열을 찾음. |
[] | [] 안에 나열된 패턴에 해당하는 문자열을 찾음. | "[123]d" | 대상 문자열에서 ‘1d’ 또는 ‘2d’ 또는 ‘3d’인 문자열을 찾음. |
^ | 시작하는 문자열을 찾음. | "^안녕" | 대상 문자열에서 ‘안녕’으로 시작하는 문자열을 찾음. |
$ | 끝나는 문자열을 찾음. | "잘가$" | 대상 문자열에서 ‘잘가’로 끝나는 문자열을 찾음. |
Numbers Limit
Pattern | 기능 | 예시 | 설명 |
---|---|---|---|
* | 0회 이상 나타나는 문자 | "a*" | ‘a’가 0번 이상 등장하는 문자열을 찾음. ‘b’, ‘a’, ‘aa’ 모두 해당. |
+ | 1회 이상 나타나는 문자 | "국+" | ‘국’이 1번 이상 등장하는 문자열을 찾음. ‘한국’, ‘미역국’, ‘국거리’ 모두 해당. |
{m,n} | m회 이상 n회 이하 반복되는 문자 | "치{1,2}" | ‘치’가 1회 이상 2회 이하 반복하는 문자열을 찾음. ‘치커리’, ‘치카치카’ 모두 해당. |
? | 0~1회 나타나는 문자 | "[가나다]?" | ‘가’ 또는 ‘나’ 또는 ‘다’가 0~1회 등장하는 문자열을 찾음. ‘가지마’, ‘나라’, ‘안녕’ 모두 해당. |
char
패턴 | 기능 | 사용 예시 | 설명 |
---|---|---|---|
[A-z] 또는 [:alpha:] 또는 \a | 알파벳 대문자 또는 소문자인 문자열을 찾음 | "[A-z]+" | 대상 문자열에서 알파벳이 한 개 이상인 문자열을 찾음 |
[0-9] 또는 [:digit:] 또는 \d | 숫자인 문자열을 찾음 | "^[0-9]+" | 한 개 이상의 숫자로 시작하는 문자열을 찾음 |
Not
Pattern | 기능 | 예시 | 설명 |
---|---|---|---|
[^문자] | 괄호 안의 문자를 포함하지 않은 문자열을 찾음 | "[^길로그]" | ‘길’ 또는 ‘로’ 또는 ‘그’를 포함하지 않는 문자열을 찾음. ‘길가’, ‘로그’, ‘그리고’ 모두 제외됨. |
-- vowel 로 시작하지 않는 것들 검색하기
SELECT DISTINCT CITY
FROM STATION
WHERE CITY RLIKE '^[^aeiouAEIOU].*';
3. 예시
-- '설' 또는 '유"가 포함된 문자열을 찾고 싶을 때
-- 정규표현식을 사용하지 않을 때
SELECT *
FROM tbl -- table
WHERE data like '%설%'
OR data like '%유%'
;
-- 정규표현식을 사용할 때
SELECT *
FROM tbl
WHERE data REGEXP '설|유' -- 엔터키 위에 '|'
;
# 길이 7글자인 문자열 중 2번째 자리부터 '설'를 포함하는 문자열을 찾고 싶을 때
# 정규표현식을 사용하지 않을 때
SELECT *
FROM tbl
WHERE CHAR_LENGTH(data) = 7
AND SUBSTRING(data, 2, 3) = '설';
-- CHAR_LENGTH = 문자열의 길이 check
-- => 숫자로 return
# 정규표현식을 사용할 때
SELECT *
FROM tbl
WHERE data REGEXP ('^.설...$');
-- . 온점을 가지고 자릿수를 만들었다.
# 텍스트와 숫자가 섞여 있는 문자열에서 **숫자로만 이루어진 문자열**을 찾고 싶을 때
# 정규표현식을 사용하지 않을 때
SELECT *
FROM tbl
WHERE data LIKE ??????????
-- >???
# 정규표현식을 사용할 때
SELECT *
FROM tbl
WHERE data REGEXP ('^[0-9]+$');
-- OR data REGEXP ('^\d$')
-- OR data REGEXP ('^[:digit:]$');
-- $ -> 끝나는 문자열을 찾기
-- [0-9]+ -> 숫자인 문자열
4. python
- Python에서는
re
라는 모듈로 정규식 활용
정규식 원리 시각화 사이트
https://regexper.com/#SELECT DISTINCT CITY FROM STATION
WHERE CITY RLIKE '^[^aeiouAEIOU].*'%3B
참고
https://velog.io/@gillog/MySQL-REGEXPRegular-Expression정규-표현식
https://yurimkoo.github.io/analytics/2019/10/26/regular_expression.html
SQL 관련 글들
- 데이터 분석을 준비하기전 제일 먼저 읽었던 글들이다. 사실 그때는 파이썬 하나면 모든 부분이 해결 가능할줄 알았다.
- SQL에 대한 중요성을 몰랐다. 위 글들을 읽고 실제로 분석가가 업무에 어떻게 SQL을 사용하는지 이해하고 나서야 SQL에 대한 중요성을 알게되었다.
- 이것이 사실 나에게는 큰 행운이라고 생각한다. 데이터 분석 직무 준비에 있어 시간낭비를 많이 안하게 되었으니까 ?
- 앞으로 관련해서 더 좋은 글들이 있으면 추가할 예정이다 !
반응형
댓글