반응형

SELECT DATE_ADD('2019-10-31', INTERVAL (DAYOFWEEK('2019-10-31')-1) * -1 DAY)
         , DATE_ADD('2019-10-31', INTERVAL (DAYOFWEEK('2019-10-31')-7) * -1  DAY);

 

위의 날짜를 바꿔가며 사용하시면 됩니다.

반응형
반응형

1. 전체 테이블 추출시

COPY 테이블이름 TO '추출경로/추출파일이름.csv' WITH DELIMETER '구분자' CSV HEADER ENCODING 'UTF8';

 

예시 )

Copy table_name To 'D:/test/test.csv' WITH DELIMITER ',' CSV HEADER ENCODING 'UTF8';

 

2. 특정 컬럼 추출시

Copy table_name(column1, column2, ...) To 'D:/test/test.csv' WITH DELIMITER ',' CSV HEADER ENCODING 'UTF8';

 

 

3. SELECT 문으로 추출시

Copy (SELECT * FROM table_name where column1='aa' order by column2) To 'D:/test/test.csv' WITH DELIMITER '|' CSV HEADER ENCODING 'UTF8';

반응형
반응형

table fruit

id data
과일 사과|배|복숭아|포도|수박

이런 데이터가 있다고 가정할 때

 

 

SELECT

split_part(data, '|', 1)

FROM fruit where id='과일';

사과

 

SELECT

string_to_array(data, '|')

FROM fruit where id='과일';

{사과,배,복숭아,포도,수박}

 

SELECT

unnest(string_to_array(data, '|')) 

FROM fruit where id='과일';

사과
복숭아
포도
수박

 

이렇게 가져올 수 있습니다.

반응형
반응형

MYSQL 에서 GROUP_CONCAT 함수를 사용시

#HY000Row 4611 was cut by GROUP_CONCAT() 

같은 에러가 날 경우가 있습니다. 

 

이때에는

https://stackoverflow.com/questions/7208773/mysql-row-30153-was-cut-by-group-concat-error

 

MySQL "Row 30153 was cut by GROUP_CONCAT()" error

I have a function listed below. When I call it with the LIMIT set at 0,60 as seen below, it works fine. However, whenever I increase that LIMIT to 70 or higher, or even remove the LIMIT, MySQL errors

stackoverflow.com

이 에러는 그룹콘캣 사용시 CONCAT 되는 문자열이 너무 길 경우 발생하는 에러인데요

위의 링크된 글을 참조하여

 

SET group_concat_max_len=150000;

 

의 명령어로 group concat의 max length 를 늘려주어

해결할 수 있습니다.

반응형
반응형

INSERT INTO TB_NAME(COL_NAME1, COL_NAME2, … , LAST_COL_NAME) 

VALUES('어쩌고''저쩌고''이러쿵'); -- INT 타입 데이터는 따옴표 안붙여도 됨

 

UPDATE TB_NAME SET COL_NAME='저러쿵'--모든 행 바꾸기

UPDATE TB_NAME SET COL_NAME='저러쿵' WHERE COL_NAME1=5-- ㅡ특정행 바꾸기

 

DELETE FROM TAB_NAME; -- 전체 삭제

DELETE FROM TAB_NAME WHERE COL_NAME='ABCD'-- 특정행 삭제

 

SELECT * FROM TB_NAME --테이블의 모든 데이터 조회

SELECT COL_NAME1, COL_NAME2 FROM TB_NAME WHERE COL_NAME1='1234'; -- 테이블의 특정 컬럼을 특정 데이터만 조회

반응형
반응형

CREATE 

1
2
3
4
5
6
7
8
CREATE TABLE TB_NAME(
    COL_NAME1 VARCHAR(10NOT NULL PRIMARY KEY,
    COL_2NAME INT NOT NULL  AUTO_INCREMENT UNIQUE,
    COL_NAME3 CHAR(10DEFAULT NULL,
    COL_NAME4 VARCHAR(5DEFAULT 'Y',
    CONSTRAINT test_check CHECK(COL_NAME4 BETWEEN 'Y' AND 'N'),
    PRIMARY KEY (COL_2NAME)
);

 

ALTER

1
2
3
4
5
6
7
8
9
ALTER TABLE TB_NAME ADD COL_NAME5 INT;
ALTER TABLE TB_NAME DROP COLUMN COL_NAME3;
ALTER TABLE TB_NAME MODIFY COL_NAME4 VARCHAR(3DEFAULT 'N';
ALTER TABLE TB_NAME RENAME COLUMN COL_2NAME TO COL_NAME2;
ALTER TABLE TB_NAME ADD CONSTRAINT CONST_NAME1 PRIMARY KEY(COL_NAME4);
ALTER TABLE TB_NAME ADD CONSTRAINT CONST_NAME2 FOREIGN KEY(COL_NAME5) REFERENCES TB_NAME2(COL_NAME5);
ALTER TABLE TB_NAME ADD CONSTRAINT CONST_NAME3 CHECK (COL_NAME5 > 1);
ALTER TABLE TB_NAME ADD CONSTRAINT CONST_NAME4 CHECK (COL_NAME4 IN ('F','M'));
ALTER TABLE TB_NAME DROP CONSTRAINT CONST_NAME3;
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter

 

DROP, RENAME, TRUNCATE

1
2
3
4
5
RENAME TB_NAME TO TB_NEW_NAME;  -- 오라클
RENAME TABLE TB_NAME TO TB_NEW_NAME;  -- MYSQL
TRUNCATE TABLE TB_NEW_NAME;
DROP TABLE TB_NEW_NAME;
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
반응형
반응형

MYSQL 에서

중복되는 항목이 있는지 찾고싶을 때

1
2
3
4
5
SELECT  COLUMN_NAME ,  -- 중복되는 데이터
         COUNT(COLUMN_NAME) -- 중복 갯수
FROM TABLE_NAME              -- 중복조사를 할 테이블 이름
GROUP BY COLUMN_NAME      -- 중복되는 항목 조사를 할 컬럼
HAVING COUNT(COLUMN_NAME) > 1 ;  -- 1개 이상 (갯수)

위와같은 쿼리로 하시면 됩니다.

반응형
반응형

MYSQL 작업시 테이블에는 없는 순번을 매기는 방법입니다.


  

1
2
3
4
5
6
7
8
9
10
/*변수 선언을 위에 해주는 방식*/
SET @rownum:=0;
 
SELECT
    @rownum:=@rownum + 1 as rNum,
    t1.*
FROM
    TABLE_NAME t1
;
 
cs

혹은

1
2
3
4
5
6
7
8
9
/*변수 선언을 내부에 해주는 방식*/
SELECT
    @rownum:=@rownum + 1 as rNum,
    t1.*
FROM
    TABLE_NAME t1,
    (SELECT @rownum:=0) t2
;
 
cs

그냥 아무런 조건 없이 순번을 주실 때는 이렇게 해주시면 됩니다.







만약 그룹별로 순번을 다르게 매기고 싶으시다면

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* 변수 선언을 위에 해주는 방식*/
/* 만약 조건이 문자열이라면 */ /* 만약 조건이 숫자라면 */
    /* SET @val:=''; */         /* SET @val:=0;  */
/* 위에것 둘 중 하나만 써주시면 됩니다. */
/* 만약 그룹지을 조건이 VAL1 이라면 */
 
SET @rownum:=0;
 
SELECT MAIN.*
FROM (
    SELECT 
    (CASE @val WHEN t1.VAL1 THEN @rownum:=@rownum+1 
    ELSE @rownum:=1 END) as rNum,
    (@val:=t1.VAL1) temp,
    t1.*
   FROM TABLE_NAME t1 
   ORDER BY t1.VAL                  
) MAIN;
 
cs

이렇게 해주시거나

혹은


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* 변수 선언을 내부에 해주는 방식*/
/* 만약 그룹지을 조건이 VAL1 이라면 */
 
SELECT MAIN.*
FROM (
    SELECT 
    (CASE @val WHEN t1.VAL1 THEN @rownum:=@rownum+1 
    ELSE @rownum:=1 END) as rNum,
    (@val:=t1.VAL1) temp,
    t1.*
   FROM TABLE_NAME t1,
        (SELECT @val:='', @rownum:=0) SUB
   ORDER BY t1.VAL                  
) MAIN;
 
cs



이렇게 순번을 매기시면 됩니다.

반응형

+ Recent posts