String : char 들의 집합으로 문자열을 의미하며 보통 varchar(N)으로 표현됩니다.
Date : 날짜를 나타내는 변수로 "년/월/일" 형식입니다.
Datetime : 날짜, 시간을 모두 포함하는 변수로 "년/월/일 시/분/초" 형식입니다.
STRING
문자열 처리 시 보통 많이 사용하는 비교 구문으로 LIKE 가 있습니다. 주로 WHERE 절에 사용되며 문자열에 부분적으로 일치하는 패턴이 있는지 확인할 때 사용합니다.
WHERE '칼럼' LIKE '조건'
'%' : 해당 위치에는 어떠한 '문자열'이 와도 상관없음, 빈문자열도 가능함
'_' : 해당 위치에는 어떠한 '문자'가 와도 상관없음, 빈문자는 불가능
예를 들어 조건이 '_AA%' 인 경우 'BAA34', 'AAA'는 가능하지만 'AABC'는 불가능합니다.
'A%' : A로 시작하는 모든 경우
'%A' : A로 끝나는 모든 경우
'A_' : A로 시작하는 두 자리 문자열
%, _를 검색하고 싶다면 이스케이프 문자를 이용합니다.
LIKE '#%%' ESCAPE '#' : #을 이스케이프 문자로 지정하여 #뒤에 나오는 모든 문자는 문자 그대로 인식하게 됩니다. 따라서 결과는 %로 시작하는 모든 경우를 출력하게 됩니다.
주의해야 할 점은 MYSQL에서 LIKE 절은 대소문자를 구분하지 않으므로 'a%', 'A%' 두 조건은 같은 결과가 나오게 됩니다. 대소문자 구분을 하고 싶으면 REGEXP_LIKE함수와 옵션을 활용하거나, BINARY('칼럼') LIKE 'a%'를 이용해서 문자열이 아닌 이진데이터로 비교를 하면 됩니다.
REGEXP_LIKE
LIKE와 IN 절은 함께 사용할 수 없어 A, B로 시작하는 문자열을 LIKE IN ('A%', 'B%') 형식으로 사용할 수 없습니다.
이를 위해 사용하는 함수가 REGEXP_LIKE 입니다.
REGEXP_LIKE( '문자열', '패턴', 옵션)
패턴 : 정규 표현식을 사용하며 문자열에 해당 정규식이 성립하는지 확인하여 검색합니다.
옵션 : 특정 옵션을 주고 실행합니다.
정규식
옵션
DATE
TIMESTAMP, TIME의 경우 숫자형, DATE, DATETIME의 경우 문자형으로 저장되기 때문에 범위가 각각 다릅니다.
MYSQL에서 DATE_FORMAT 함수를 이용해서 날짜 변수를 원하는 형태로 문자열로 바꿀 수 있습니다.
DATE_FORMAT('변수', '형식')
형식 : '%Y-%M-%D' 형식으로 지정할 수 있습니다.
%Y : 년도, %M : 월, %D : 일, %Y/%M/%D' 처럼 원하는 문자를 입력할 수 있습니다.
문제
루시와 엘라 찾기
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty');
이름에 EL이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE ANIMAL_TYPE = 'Dog' AND NAME LIKE '%el%'
ORDER BY NAME;
중성화 여부 파악하기
LIKE
SELECT ANIMAL_ID, NAME, IF(
SEX_UPON_INTAKE LIKE 'Neutered%' or SEX_UPON_INTAKE LIKE 'Spayed%', 'O', 'X'
) AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
REGEXP_LIKE
SELECT ANIMAL_ID, NAME, IF(
REGEXP_LIKE(SEX_UPON_INTAKE, 'Neutered*|Spayed*') , 'O', 'X'
) AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
오랜 기간 보호한 동물(2)
DATETIME 변수끼리 연산이 가능합니다.
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC
LIMIT 2;
DATETIME에서 DATE로 형 변환
DATE_FORMAT으로 변환 시 %Y-%M-%D를 사용하는데 년도는 잘 출력되지만 달, 일은 영어문 형식으로 출력되어 틀리게 됩니다.
형 변환 후 LEFT 혹은 SUBSTRING으로 시/분/초를 잘라줍니다.
SELECT ANIMAL_ID, NAME, LEFT(CONVERT(DATETIME, DATE),10) AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
'스터디 > SQL' 카테고리의 다른 글
[SQL] Join (0) | 2021.03.02 |
---|---|
[SQL] NULL 처리 (0) | 2021.02.28 |
[SQL] GROUP BY (0) | 2021.02.28 |
[SQL] 집계 함수 (0) | 2021.02.26 |
[SQL] SELECT (0) | 2021.02.26 |