스터디/SQL

[SQL] String, Date 처리

latter2005 2021. 3. 3. 23:50

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( '문자열', '패턴', 옵션)
패턴 : 정규 표현식을 사용하며 문자열에 해당 정규식이 성립하는지 확인하여 검색합니다.
옵션 : 특정 옵션을 주고 실행합니다.

 

정규식

 

정규 표현식

위키백과, 우리 모두의 백과사전. 노랑색 강조 부분은 다음 정규식을 사용했을 때 매치된 것이다. 정규 표현식(正規表現式, 영어: regular expression, 간단히 regexp[1] 또는 regex, rational expression)[2][3] 또

ko.wikipedia.org

옵션

 

REGEXP_LIKE

REGEXP_LIKE REGEXP_LIKE is similar to the LIKE condition, except REGEXP_LIKE performs regular expression matching instead of the simple pattern matching performed by LIKE. This condition evaluates strings using characters as defined by the input character

docs.oracle.com

 

DATE

날짜, 시간을 저장하는 변수들

TIMESTAMP, TIME의 경우 숫자형, DATE, DATETIME의 경우 문자형으로 저장되기 때문에 범위가 각각 다릅니다.

 

MYSQL에서 DATE_FORMAT 함수를 이용해서 날짜 변수를 원하는 형태로 문자열로 바꿀 수 있습니다.

DATE_FORMAT('변수', '형식')
형식 : '%Y-%M-%D' 형식으로 지정할 수 있습니다.
%Y : 년도, %M : 월, %D : 일, %Y/%M/%D' 처럼 원하는 문자를 입력할 수 있습니다.

 

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

루시와 엘라 찾기

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