목록옛날 창고/SQL (29)
Dev JS Blog
MySQL 특정 문자열로 자르기 SELECT 'A>B>C' AS depth FROM DUAL A>B>C 라는 depth 컬럼이 있다. 구분자 '>' 를 기준으로 문자열을 자르고 싶다면 substring_index 를 이용한다. substring_index(컬럼,구분자,구분자 인덱스) SELECT substring_index('A>B>C','>',1) AS DEPTH FROM DUAL 결과) A SELECT substring_index('A>B>C','>',2) AS DEPTH FROM DUAL 결과) A>B 두번째 구분자 까지 결과값이 나온다. 그럼 B 만 나오게 하려면 어떻게 짤라야할까..? B 다음과 그 전(-1)을 짜르면 된다. SELECT substring_index(substring_index(..
mysql 에서 날짜를 더하고 빼고 싶을때는 어떻게 해야할까..? 바로 date_add를 이용하면된다. SELECT DATE_ADD(date형식, INTERVAL 숫자 원하는곳) FROM dual 포맷 결과 INTERVAL 1 day 1일 추가 INTERVAL 1 month 1달 추가 INTERVAL 1 hour 1시간추가 INTERVAL 1 minute 1분추가 INTERVAL 1 second 1초추가 반대로 빼는건 -1 마이너스로 하면 된다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/beHoQ6/btqSjCgFvUU/uHkpV7ylypE4rauZ9i9dsK/img.png)
기본적으로 툴에서 이렇게 실행해본다. 현재 날짜와 시간이 나온다. 근데 실제 데이터는 툴의 날짜 포맷 설정대로 나오는 것일뿐.. 실제 데이터는 ms까지 다 찍힌다는 것..! 언제나 그렇듯 개발을 하다보면 내가 원하는 데이터로 포맷변환을 해줘야한다는것 기본적으로 이렇게 포맷을 해줄수가 있다. select date_format(now(),'%Y-%m-%d %T') from dual; 이렇게 결과가 나오지만 대소문자에 따라 결과는 다르게 나온다. 포맷 결과 %y 21(년 뒷자리2자리만) %Y 2021(년) %m 01(일) %M January(영어 월) %T(기본적으로 대문자만) 시간:분:초 원하는 포맷형식으로 쿼리를 짜서 사용하기를
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwk6Bg/btqSmAA73vg/UKJl0ZAHIoTdkYENk1vdY0/img.png)
SQL Query의 기본인 Where절에 대해서 정리해보려한다. WHERE 에는 기본적으로 조건을 추가할때는 and, or 을 사용 할 수 있다. where 처음 조건 and 두번째 조건 and 세번째 조건 AND 는 교집합, OR 는 합집합 이므로 OR 은 괄호를 잘해주어야한다.(이건 하다보면 느끼게된다..) 그럼 기본적인 조건 쿼리에 대해서 알려주겠다. penthouse 테이블이 있다. 여기서 주단태 만 보고싶다면..? 그럼 반대로 주단태만 안보고 싶다면? 그럼 주단태와 천서진을 보고싶다면? 이렇게..? 결과가 안나온다. 왜냐하면 AND 는 교집합 즉 name 이 주단태 이고 천서진 인 사람을 뽑았기 때문이다. 그럼 OR 를 이용해서 해야겠군..? 하면 원하던 주단태와 천서진이 나온다. 하지만 여기서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/buMOXL/btqSjAOWeHQ/weAARSGTqy9gtEux1PqWAK/img.png)
쿼리를 짜다보면 기준 테이블로 1부터 10까지 혹은 1부터 100까지 있는 임시 테이블을 쿼리로 어떻게 짜야하나 싶을때가 있다. 그럴땐 with 문을 활용하자. 이렇게 해준다면 이렇게 깔끔한 결과가 나온다. 간단히 또 활용 가능한 것은 내가 원하는 기준년도 컬럼을 만들수가 있다. 이렇게 해준다면 2010 년 부터 2021 년까지의 년도 컬럼을 가지고 있는 임시테이블을 구성할 수 있으니 쿼리를 짤때 활용하면 된다. 추가로 날짜도 하는법을 추가 합니다. WITH RECURSIVE cte AS ( SELECT date_format('2020-01-01','%Y-%m-%d') AS dt FROM DUAL UNION ALL SELECT date_add(dt,INTERVAL 1 DAY) FROM cte WHERE ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/AFFK2/btqR3RwxhI0/ioGlugsg8zPXCtzjvUxyS0/img.png)
여기 펜트하우스 테이블 데이터가 있다. 여기서 각 로우마다 row number 을 부여하고 싶다면 ROW_NUMBER() OVER(ORDER BY 기준) 을 사용해주면된다. class 기준으로 row number 가 부여된다. over 안에 order by는 기존에 order by를 하는것과 동일한 기능이므로 심수련이 주단태보다 더 먼저 오게 하겠다면 name 도 정렬 기준에 넣어주면된다.
[MySQL] MySQL data convert MySQL 데이터 포맷 변경 방법!! SELECT convert('값',형식(크기)) FROM dual ex) SELECT convert('값',char(20)) FROM dual 로 쉽게 변경 가능하다. ex) SELECT convert('2020-01-01',datetime) FROM dual 하면 날짜타입으로 변경~
[MySQL] MySQL WITH 재귀쿼리 계층구조 보통 WITH 문 재귀쿼리 를 이용해서 계층 구조를 나타내는데 사용한다. 일단 재귀쿼리란..? 재귀 - 원래의 자리로 되돌아가거나 되돌아옴 이란 뜻을 갖고 있다. 쉽게 생각하면 같은걸 반복한다고 생각하면 쉬울까.. 즉 재귀쿼리는 한 쿼리가 반복되어 실행된다고 생각하면 된다. 이러한 반복 쿼리는 계층구조를 SELECT 할때 유용하게 쓰인다. 기본적으로 코드 테이블 구조를 만들때 code 와 parent_code(부모코드) 컬럼으로 구성하게 되면 계층구조로 select 하기 편해진다. WITH 문을 이용한 계층쿼리 부터 확인해보자 CODE_TABLE code parent_code a A b A A AA B AA AA 테이블 데이터가 이렇게 구성되어있다고 생..