반응형

https://mariadb.com/kb/en/mariadb-connector-j-releases/

 

List of MariaDB Connector/J Releases

A list of all Connector/J releases

mariadb.com

이곳에서 자신의 자바 버전에 맞는 mariadb connector/j 를 확인 후

 

https://mariadb.com/downloads/connectors/

 

Download MariaDB Connectors for data access & analysis | MariaDB

Download MariaDB Connector/Python, MariaDB Connector/C, MariaDB Connector/J, MariaDB Connector/Node.js, MariaDB Connector/R2DBC, MariaDB Connector/ODBC and more

mariadb.com

이 곳에서 자바 버전에 맞는 최신 mariadb jdbc 버전을 받으시면 됩니다.

 

혹시 이전 버전이 필요하시다면

 

메이븐 리파지토리에서 버전별로 jar 파일을 다운받으시면 됩니다.

 

https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client

 

반응형
반응형

이전포스팅에서 Mysql 쿼리로

구분자로 구분된 문자열을 행으로 분리하는 쿼리를 작성했었는데

https://dzzienki.tistory.com/35

 

MySQL 문자열 구분자 여러개 있을 때 여러 행으로 분리하기

일을 하던 도중 MySQL 에서 한 문자열에 여러개의 구분자가 있을 때,예를 들면 '동해물과;백두산이;마르고;닳도록;하느님이;보우하사;우리나라;만세' 이런 테이블이 있다고 가정했을 때 1절 동해

dzzienki.tistory.com

이번에는 오라클 DB 에서 구분자를 행으로 분리하는 쿼리가 필요하여 작성하였다.

위 내용은 

https://gent.tistory.com/10

 

[Oracle] 문자열 구분자를 행으로 분리 (Split)

오라클 쿼리에서 칼럼에 구분자로 입력된 값을 행으로 분리(Split)하여 조회해야 할 상황이 종종 발생한다. 대부분 값을 조회하여 프로그래밍 코드에서 구분자를 분리하는 작업을 한다. 그러나

gent.tistory.com

해당 블로그에서 참조하였다.

 

위의 블로그에서는

10g 이상 버전과 8i 버전 두가지를 나누어 사용하였으니 필요하신 분들은 참고하시길 바란다.

 

 

 

만약 이런 테이블이 있다고 가정했을 때

JUL CONTENT
 1절  동해물과;백두산이;마르고;닳도록;하느님이;보우하사;우리나라;만세
 2절  남산위에;저소나무;철갑을;두른듯;바람서리;불변함은;우리;기상일세
 3절  가을하늘;공활한데;높고;구름없이;밝은달은;우리가슴;일편;단심일세
 4절  이기상과;이맘으로;충성을;다하여;괴로우나;즐거우나;나라;사랑하세
 후렴  무궁화;삼천리;화려강산;대한사람;대한으로;길이;보전하세

위의 테이블을

JUL CONTENT
 1절  동해물과
 1절  백두산이
 1절  마르고
 1절  닳도록
 1절  하느님이
 1절  보우하사
 1절  우리나라
 1절  만세
 2절  남산위에 
 2절  저소나무

이렇게 바꾸는 쿼리이다.

 

 

 

1
2
3
4
5
SELECT JUL, 
REGEXP_SUBSTR(CONTENT, '[^;]+'1, b.lv) AS CONTENT  --여기 ^ 뒤에 구분된 구분자를 입력한다
FROM akukka, (SELECT LEVEL AS lv FROM dual CONNECT BY LEVEL <=8) b --여기 LEVEL 뒤의 숫자를 나누어질 갯수로 지정해줘야 한다. 
WHERE REGEXP_SUBSTR(CONTENT, '[^;]+'1, b.lv) IS NOT NULL --여기 ^ 뒤에 구분된 구분자를 입력한다
cs
반응형
반응형

 

예를들어 이런 테이블 A가 있다고 가정해봅시다.

 

국적 성별 나이
한국 11
미국 24
한국 30
한국 43
캐나다 16
미국 33
한국 29
미국 25
캐나다 51

 

그리고 저는 이런 결과를 도출하고 싶었습니다.

 

한국 미국 캐나다 10대 20대 30대 40대
? ? ? ? ? ? ? ? ? ?

 

이 때 하나의 쿼리로 group by 절을 이용하여 결과값을 도출하려 했으나

아무리 해도 방법이 떠오르지 않아 애를 먹던 중

 

https://blog.shovelman.dev/841

 

[삽잡이::sql] 두 종류의 COUNT를 한번에 얻어보자! 특정 조건 Count

Query문을 작성하며 원하는 결과가 포함된 데이터의 개수를 구하기 위해 COUNT()를 사용하곤 합니다. 그런데, 예를 들어봅시다. 이와 같은 Table이 있는데, 해당 Table의 전체 개수와 Age가 10대인 데이

blog.shovelman.dev

 

이 분의 블로그를 보고 정답을 알았습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
    COUNT(*) as 총
  , COUNT(IF(국적 = '한국', 국적, NULL)) as 한국
  , COUNT(IF(국적 = '미국', 국적, NULL)) as 미국
  , COUNT(IF(국적 = '캐나다', 국적, NULL)) as 캐나다
  , COUNT(IF(성별 = '남', 성별 , NULL)) as 남
  , COUNT(IF(성별 = '여', 성별 , NULL)) as 여
  , COUNT(IF(나이 >= 10 AND 나이 < 20, 나이 , NULL)) as 10대
  , COUNT(IF(나이 >= 20 AND 나이 < 30, 나이 , NULL)) as 20대
  , COUNT(IF(나이 >= 30 AND 나이 < 40, 나이 , NULL)) as 30대
  , COUNT(IF(나이 >= 40 AND 나이 < 50, 나이 , NULL)) as 40대
FROM
    A;
 
 
cs

 

이런식으로 작성해주시면

group by 절 없이, 여러개의 조건으로 한번에 통계를 추출할 수 있습니다.

 

도움을 주신 shovelman 님께 감사드립니다.

반응형
반응형

오라클의 자동증가 컬럼 설정을 찾아보면 대부분 시퀀스를 설정하여

INSERT 시 해당 컬럼에 sequence.NEXTVAL 을 이용하여 자동 증가시키는 예제가 대부분이었습니다.

그래서 시퀀스를 사용하지 않고 값을 자동증가 시킬 방법이 없을지 찾아보다가

다음과 같은 글을 발견했습니다.

 

https://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle

 

How to create id with AUTO_INCREMENT on Oracle?

It appears that there is no concept of AUTO_INCREMENT in Oracle, up until and including version 11g. How can I create a column that behaves like auto increment in Oracle 11g?

stackoverflow.com

 

이 글에 아래쪽에 보시면

 

 

이런 부분이 나오는데

해당 쿼리를 이용하면

ID 에 값을 넣어주지 않아도 자동으로 증가하는 테이블을 만들 수 있습니다.

예를들어

 

create table TEST (

  ID NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),

  CONTENT VARCHAR2(255),

);

 

이런 테이블을 생성하면

INSERT 시

INSERT INTO TEST (CONTENT) VALUES ('TEST');

이렇게  CONTENT 값만 넣어줘도

ID 컬럼에 자동으로 값이 증가되어 INSERT 되는 것을 확인할 수 있었습니다.

 

반응형
반응형

/*연도별*/
WITH WD AS 
(
SELECT TO_DATE('2015-01-01', 'YYYY-MM-DD') AS FROM_DT
, TO_DATE('2020-07-30', 'YYYY-MM-DD') AS TO_DT
FROM DUAL 
)
SELECT DT
FROM (
SELECT TO_CHAR(TO_CHAR(FROM_DT,'YYYY') + LEVEL -1) AS DT
FROM WD 
CONNECT BY LEVEL <= TO_CHAR(TO_DT, 'YYYY') - TO_CHAR(FROM_DT,'YYYY')+1
)

/*월별*/
WITH WD AS 
      ( 
        SELECT TO_DATE('2021-01-01', 'YYYY-MM-DD') AS FROM_DT
        , TO_DATE('2021-12-30', 'YYYY-MM-DD') AS TO_DT
        FROM DUAL 
      ) 
      SELECT DT, DT2 
      FROM ( 
        SELECT TO_CHAR(ADD_MONTHS(FROM_DT , (LEVEL-1)), 'YYYYMM') AS DT2 , 
        TO_CHAR(ADD_MONTHS(FROM_DT , (LEVEL-1)), 'YYYY-MM') AS DT 
        FROM WD 
        CONNECT BY LEVEL &lt;= MONTHS_BETWEEN(TO_DT , FROM_DT)+1
      )

/*주별*/
WITH WD AS 

  SELECT TO_DATE('2021-03-01', 'YYYY-MM-DD') AS FROM_DT -- 시작일자 
  , TO_DATE('2021-07-17', 'YYYY-MM-DD') AS TO_DT -- 종료일자 
  FROM DUAL 

SELECT DT
FROM
(
SELECT DT
FROM ( 
  SELECT TO_CHAR(FROM_DT + (LEVEL-1), 'YYYY')|| '_' || TO_CHAR(FROM_DT + (LEVEL-1), 'WW') AS DT
  FROM WD 
  CONNECT BY LEVEL <= (TO_DT - FROM_DT) + 1 
)
)
GROUP BY DT
ORDER BY DT


/*일별*/
WITH WD AS 

  SELECT TO_DATE('2020-07-01', 'YYYY-MM-DD') AS FROM_DT -- 시작일자 
  , TO_DATE('2020-07-17', 'YYYY-MM-DD') AS TO_DT -- 종료일자 
  FROM DUAL 

SELECT DT, DT2 
FROM ( 
  SELECT TO_CHAR(FROM_DT + (LEVEL-1), 'YYYYMMDD') AS DT , 
  TO_CHAR(FROM_DT + (LEVEL-1), 'YYYY-MM-DD') AS DT2 
  FROM WD 
  CONNECT BY LEVEL <= (TO_DT - FROM_DT) + 1 
)


반응형
반응형

postgresql 에는 generate_series 라는 함수가 있다.

 

대략

 

SELECT generate_series(시작, 종료, 간격)

(간격은 생략가능)

 

의 문법으로 쓰인다.

 

예를들어

 

1

select generate_series(1, 100)

cs

이렇게 쓰면

1부터 100까지 1씩 증가하는 데이터가 만들어진다.

 

만약

 

1

select generate_series(1, 100, 5)

cs

이런식으로 간격을 설정하게 되면

 

이런 데이터가 나오게 된다.

 

이 generate_series 를 이용하여 날짜 데이터를 생성할 수 있는데

사용법은 다음과 같다.

 

우선 시작날짜와 종료 날짜 사이의 데이터를 뽑고 싶다면

 

1

select generate_series('2020-01-01'::date , '2020-12-31'::date, '1 day'::interval)::date

cs

이렇게 하면 2020년 1월 1일 부터

2020년 12월 31일까지

하루 간격으로 데이터가 출력되고

 

 

1

select generate_series('2020-01-01'::date , '2020-12-31'::date, '1 month'::interval)::date

cs

이렇게 하면 한달 단위

 

그리고

1

select generate_series('2020-01-01'::date , '2020-12-31'::date, '7 day'::interval)::date

cs

이렇게 하면 일주일 단위의 날짜 데이터가 생성이 된다

 

그리고 만약

시작 종료 일자가 아닌

시작일로부터 몇일뒤의 날짜가 알고 싶다면

 

1

2

3

4

5

6

7

8

SELECT (ROW_NUMBER() OVER()) AS ROWNUM,

        a.date + b.idx as D 

FROM ( 

        SELECT '2020-01-01'::date as date 

) a 

CROSS JOIN ( 

    SELECT generate_series(0, 100) as idx 

) b

Colored by Color Scripter

cs

이런식으로 날짜 데이터 생성이 가능하다

이걸 응용하면

시작일로부터 n일이 지난 날짜의 월 데이터를 추출할 수도 있다.

 

1

2

3

4

5

6

7

8

9

10

11

12

SELECT DISTINCT to_char(D, 'YYYY-MM') AS date

FROM (

    SELECT (ROW_NUMBER() OVER()) AS ROWNUM,

            a.date + b.idx as D 

    FROM ( 

            SELECT '2020-01-01'::date as date 

    ) a 

    CROSS JOIN ( 

        SELECT generate_series(09999) as idx 

    ) b) T

WHERE D::date <= to_date('2020-12','YYYY-MM')::date

ORDER BY date

Colored by Color Scripter

cs

반응형
반응형

1. https://www.postgresql.org/

 

PostgreSQL: The world's most advanced open source database

PostgreSQL is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance. There is a wealth of information to be found descr

www.postgresql.org

postgresql  공식홈페이지에 접속해서 다운로드 페이지에 들어갑니다

 

 

2. 여러가지 운영체제중 Windows 를 선택합니다

 

 

3. Download the Installer 라고 써있는 부분을 클릭합니다.

 

 

4. 자신의 운영체제 bit 와 설치할 postgresql 의 버전을 선택합니다.

저는 윈도우 64bit 에 postgresql 12 버전을 설치하겠습니다.

 

 

 

5. 다운받아진 설치파일을 실행합니다.

 

 

원하는 경로를 설정해줍니다.

이때 새 폴더가 생성되는게 아니라

선택한 폴더 아래에 바로 설치되므로

새 폴더를 생성해주고 적당한 이름을 지정해준 후

해당 폴더를 선택하여 설치해주는것이 좋습니다.

 

 

어떤 분들은 pgadmin 과 Stack Builder 를 제외하고 설치하시는 분들도 계시던데

저는 그냥 다 설치하겠습니다.

pgadmin 은 sql 툴이라고 생각하시면 됩니다.

 

 

postgres 의 데이터가 저장 될 폴더를 지정합니다.

보통 자동으로 data 폴더가 생성이 되어 그냥 Next> 버튼을 누르면 됩니다.

(중간에 경로가 다른것은 시행착오를 겪었기 때문이니 무시하셔도 괜찮습니다 :)

 

관리자 비밀번호를 지정해줍니다.

 

 

포트도 기본포트인 5432로 놔두고 Next> 를 눌러줍니다.

자랑스러운 Korean, Korea 를 선택해줍니다.

South, North 의 구분이 없는걸 보니 통일을 염원했나보네요

 

Next > 를 눌러줍니다.

 

 

 

Next > 를 또 눌러줍니다.

 

 

설치가 잘 진행되고 있습니다.

 

 

 Stack Builder 는 PostGIS 등의 확장 프로그램을 설치할 때 필요한 툴입니다.

우선은 특별히 설치할 프로그램이 없으니 체크를 해제하고 Finish를 눌러 설치를 완료합니다.

 

 

 

윈도우 검색창에 pgadmin 4 라고 검색하시면 sql 툴이 검색되는데 실행시킵니다.

위에서 설정해준 비밀번호를 입력하고 OK 버튼을 누르시면

 

 

위와같은 화면이 나오는데 그러면 설치가 잘 완료된 것입니다.

반응형
반응형

mysql 이나 mssql로 문자열을 구분자로 구분하고 싶을 때
substring_index를 사용하시면 됩니다.

substring_index 와 같은 기능을 하는 함수가
postgresql에도 있는데
그것은 바로 split_part 입니다.
사용법은 아래와 같구요

한가지 차이점이라면

mysql에선 구분된 문자열을 뒤에서부터 가져오고 싶으면
인자로 마이너스 값을 주시면 되지만
split_part에선 마이너스값을 사용할 수가 없습니다.

해결 방안으로는
reverse 함수로 한번 감싸 문자열을 뒤집은 후
split_part로 구분된 문자열을
reverse로 다시 뒤집으시면 됩니다.

반응형

+ Recent posts