About Data/DB

[Mysql][MariaDB] 데이터 자르기 split(cut), 합치기, CASE WHEN THEN END 활용 예시

Tradgineer 2020. 2. 19. 17:48

 

 

 

1. 왼쪽 첫번째부터 2번째까지의 문자 가져오기

ex. 'testworking' -> 'te'

LEFT(filename,2)

 

 

 

2. 왼쪽 첫번째부터 2번째까지의 문자 가져오기

ex. 'testworking' -> 'ng'

RIGHT(filename,2)

 

 

 

 

3. 왼쪽에서 3번째 문자부터 연달아 2개의 문자 가져오기

ex. 'testworking' -> 'st'

SUBSTRING(filename,3,2)

 

 

 

4. 문자열 합치기

filename = 'TEST' 라면

CONCAT('Hi! ', (filename,1))

위 쿼리 결과값은 'Hi! T' 입니다.

 

 

 

5. 1/2/3/4번 내용 응용 예시

UPDATE Tmp.upload_hist SET filename=CONCAT('/',LEFT(filename,1),'/',SUBSTRING(filename,2,1),'/',filename) WHERE rslt_status = 'READY';

UPDATE Tmp.upload_hist SET port='21', ftpuser='test_dump_user', ftppass='testpassword' WHERE rslt_status = 'READY';

 

 

 

6. filename의 왼쪽 첫번째 문자값에 따라 hostip 데이터를 변경

UPDATE Tmp.upload_hist SET hostip = 
CASE
WHEN LEFT(filename,1) = '0' THEN '111.111.111.111'
WHEN LEFT(filename,1) = '1' THEN '222.222.222.222'
WHEN LEFT(filename,1) = '2' THEN '333.333.333.333'
WHEN LEFT(filename,1) = '3' THEN '444.444.444.444'
END, port='21', ftpuser='ftp_dump', ftppass='password'
WHERE rslt_status = 'READY';

 

 

 

7. size 수치에 따라 filename의 데이터를 변경

UPDATE Tmp.upload_hist SET filename = 
CASE
WHEN size > 1048576 THEN CONCAT('/FILE',filename)
WHEN size <= 1048576 THEN CONCAT('/BACK',filename)
END
WHERE rslt_status = 'READY';