반응형
반응형

📝DATEDIFF, TIMEDIFF

  • DATEDIFF(날짜1, 날짜2), TIMEDIFF(시각, 시각)
  • DATEDIFF('2023-01-01',NOW()), TIMEDIFF('23:23:59', '12:11:10');
    • DATEDIFF날짜1 - 날짜2의 결과값 즉 일수를 반환합니다.
    • TIMEDIFF의 경우 시각 - 시각값을 반환합니다.
-- 현재시각 2023년 04월 30일 19시 38분 52초
SELECT DATEDIFF('2023-01-01', NOW()) AS day_diff, TIMEDIFF('23:23:59', '12:11:10') AS time_diff;

 

Document
day_diff time_diff
-119 11:12:49

 

 

📝LAST_DAY

  • LAST_DAY(날짜)
  • LAST_DAY('2020-02-01');
    • LAST_DAY현재 월의 마지막 일을 구할 수 있습니다.
    • 2월은 윤달이란게 있기 때문에 거기에 잘 활용 됩니다.
SELECT LAST_DAY('2020-02-01') AS last_day;

 

Document
last_day
2020-02-29

 

📝MAKEDATE

  • MAKEDATE(연도,정수)
  • MAKEDATE(2020, 32);
    • 연도로부터 정수만큼 일수가 지난 날을 출력합니다.
SELECT MAKEDATE(2020, 33) AS make_date;

 

Document
make_date
2020-02-02

 

 

📝MAKETIME

  • MAKETIME(,,)
  • MAKETIME(12, 11, 10);
  • 시 분 초의 값을 받아서 시:분:초를 반환합니다.
SELECT MAKETIME(12, 11, 10);

 

Document
make_time
12:11:10

 

📝PERIOD_ADD, PERIOD_DIFF

  • PERIOD_ADD(연월, 개월수), PERIOD_DIFF(연월1, 연월2)
  • PERIOD_ADD(202001, 11), PERIOD_DIFF(202001, 201812);
    • PERIOD_ADD 연월에 개월수를 더해 반환합니다.
    • PERIOD_DIFF연월에 연월을 뺀 것을 반환합니다.
SELECT PERIOD_ADD(202001, 13) AS period_add, PERIOD_DIFF(202001,202002) AS period_diff;

-- PERIOD_ADD_Format: YYMM or YYYYMM
-- PERIOD_DIFF_Format: YYMM or YYYYMM

 

Document
period_add period_diff
202102 -1

 

📝QUARTER

  • QUARTER(날짜)
  • QUARTER('2020-07-07');
    • 날짜를 기준으로 4분기중 몇 분기에 해당하는지 반환합니다.
SELECT QUARTER('2020-07-07') AS quater;

 

Document
quater
3

 

📝TIME_TO_SEC

  • TIME_TO_SEC(시간)
  • TIME_TO_SEC('12:11:10')
    • 시간을 초 단위로 반환합니다.
SELECT TIME_TO_SEC('12:11:10') AS time_to_sec;

 

Document
time_to_sec
43870
반응형
반응형

📝YEAR, MONTH, DAYOFMONTH, CURDATE, CURRENT_DATE

  • YEAR(날짜), MONTH(날짜), DAYOFMONTH(날짜)
  • YEAR(CURDATE()), MONTH(CURRENT_DATE()), DAYOFMONTH(CURRENT_DATE);
    • 날짜 년-월-일로 되어있는 걸 의미합니다.
    • YEAR은 그 중에 년만 출력합니다.
    • MONTH는 그 중 월만 출력합니다.
    • DAYOFMONTH는 그 중 일만 출력합니다. 

 

-- 현재시각 2023년 04월 30일 19시 38분 52초
SELECT YEAR(CURDATE()), MONTH(CURRENT_DATE()), DAYOFMONTH(CURRENT_DATE);

 

Document
YEAR(CURDATE()) MONTH(CURRENT_DATE()) DAYOFMONTH(CURRENT_DATE)
2023 4 30

 

📝HOUR, MINIUTE, SEONCD, CURTIME, CURRENT_TIME

  • HOUR(시각), MINUTE(시각), SECOND(시각)
  • HOUR(CURTIME()), MINIUTE(CURRENT_TIME()), SECOND(CURRENT_TIME);
    • 시각은 시:분:초로 되어 있는 걸 의미합니다.
    • HOUR은 그 중에 시만 출력합니다.
    • MINUTE은 그 중에 분만 출력합니다.
    • SECOND는 그 중에 초만 출력합니다.

 

-- 현재시각 2023년 04월 30일 19시 38분 52초
SELECT HOUR(CURTIME()), MINUTE(CURRENT_TIME()), SECOND(CURRENT_TIME);

 

Document
HOUR(CURTIME()) MINUTE(CURRENT_TIME()) SECOND(CURRENT_TIME)
19 38 52

 

📝DATE, TIIME

  • DATE(), TIME()
  • DATE(NOW()), TIME(NOW());
    • DATE연-월-일을 추출합니다.
    • TIME시:분:초를 추출합니다.

 

-- 현재시각 2023년 04월 30일 19시 38분 52초
SELECT DATE(NOW()), TIME(NOW());

 

Document
DATE(NOW()) TIME(NOW())
2023-4-30 19:38:52
반응형
반응형

📝ADDDATE, INTERVAL

  • ADDDATE(날짜,차이)
  • 날짜를 기준으로 차이만큼 더합니다
  • 차이에는 INTERAVL을 적고 일이면 DAY월이면 MONTH를 붙히면 됩니다.
  • DAY는 31일 이상이 되어도 상관 없습니다

 

SELECT ADDDATE('2020-01-01', INTERVAL 31 DAY) AS after_31_day;
           ,ADDDATE('2020-01-01', INTERVAL 1 MONTH) AS after_1_month;
           ,ADDDATE('2020-01-01', INTERVAL 1 YEAR) AS after_1_year;

 

Document
after_31_day after_1_month after_1_year
2020-02-01 2020-02-01 2021-01-01

 

📝SUBDATE

  • SUBDATE(날짜,차이)
  • 날짜를 기준으로 차이만큼 뺍니다
  • 위에 ADDDATE에 적은 사항과 똑같습니다.

 

SELECT SUBDATE('2020-01-01', INTERVAL 31 DAY); AS before_1_month
           ,SUBDATE('2020-01-01', INTERVAL 1 MONTH) AS before_1_month;
           ,SUBDATE('2020-01-01', INTERVAL 1 YEAR) AS before_1_year;

 

Document
before_31_day before_1_month before_1_year
2019-12-01 2019-12-01 2019-01-01

 

📝CURDATE, CURRENT_DATE

  • CURDATE(), CURRENT_DATE(), CURRENT_DATE;
  • 셋다 현재 년-월-일을 출력하는 함수입니다.

 

-- 현재시각 2023년 04월 30일 19시 38분 52초
SELECT CURDATE(), CURRENT_DATE(), CURRENT_DATE;

 

Document
CURDATE CURRENT_DATE() CURRENT_DATE
2023-04-30 2023-04-30 2023-04-30

 

📝CURTIME, CURRENT_TIME

  • CURTIME(), CURRENT_TIME(), CURRENT_TIME;
  • 셋다 현재 시:분:초를 출력하는 함수입니다.

 

-- 현재시각 2023년 04월 30일 19시 38분 52초
SELECT CURTIME(), CURRENT_TIME(), CURRENT_TIME;

 

Document
CURTIME CURRENT_TIME() CURRENT_TIME
19:38:52 19:38:52 19:38:52

 

📝SYSDATE, NOW

  • SYSDATE();, NOW();
  • 둘다 년-월-일 시:분:초를 출력하는 함수입니다.

 

-- 현재시각 2023년 04월 30일 19시 38분 52초
SELECT SYSDATE(), NOW();

 

Document
SYSDATE NOW()
2023-04-30 19:38:52 2023-04-30 19:38:52
반응형
반응형
-- 사용 테이블 예제
DROP TABLE IF EXISTS product_order;

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	name VARCHAR(20),
	product VARCHAR(50),
	price DOUBLE
);

INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', -5000);
INSERT INTO product_order(name, product, price) VALUES('가길동', 'TV', 500.7);  
INSERT INTO product_order(name, product, price) VALUES('나길동', 'TV', 500);  
INSERT INTO product_order(name, product, price) VALUES('다길동', 'TV', 9);

 

📝ABS

  • ABS(숫자)
  • 절대값을 계산해줍니다.
SELECT name, price, ABS(price) as abs
  FROM product_order 
 WHERE name='홍길동';

 

Document
name price abs
홍길동 -5000 5000

 

📝CELING, FLOOR, ROUND

  • CEILING(숫자) FLOOR(숫자) ROUND(숫자)
  • CEILING올림, FLOOR내림, ROUND반올림을 해줍니다.

 

SELECT  name, price, CEILING(price) AS ceilng, FLOOR(price) AS floor, ROUND(price) AS round
  FROM product_order 
 WHERE name='가길동';

 

Document
name price ceilng floor round
가길동 500.5 501 500 501

 

 

📝MOD

  • MOD(숫자1, 숫자2)
  • 숫자1을 숫자 2로 나눈 나머지 값을 반환합니다.

 

SELECT name, price, MOD(price,450) AS price_mod
  FROM product_order 
 WHERE name='나길동';

 

Document
name price price_mod
나길동 500 50

 

📝POW, SQRT

  • POW(숫자1숫자2) SQRT(숫자)
  • POW제곱을 의미합니다 여기선 2^3을 의미합니다.
  • SQRT제곱근을 나타냅니다.
SELECT name, price, POW(price,2) AS POW, SQRT(price)  AS sqrt
  FROM product_order 
 WHERE name='다길동';

 

Document
name price pow sqrt
다길동 9 81 3

 

📝SIGN

  • SIGN(숫자)
  • 숫자가 양수이면 1을 반환하고0이면 0 음수면 -1을 반환합니다.

 

SELECT name, price, SIGN(price) as sign
  FROM product_order 
 WHERE name IN ('홍길동','나길동');

 

Document
name price sign
홍길동 -5000 -1
나길동 500 1

 

📝RAND

  • RAND()
  • RAND()는 0 ~ 1 까지 실수를 랜덤으로 내보내줍니다.

 

SELECT FLOOR(1 + (RAND() * (5) )) AS random;
-- 1 ~ 6까지 랜덤한 정수가 나온다. (FLOOR를 이용해 자리 내림을 해서 정수가 나오게 된다.)

 

📝CONV

  • CONV(숫자원래 진수, 변환할 진수)
  • 숫자에 적힌 원래 진수 다른 진수로 변환시켜줍니다.

 

SELECT CONV('AA',16,2) AS conv;

 

Document
conv
101010

 

 

📝TRUNCATE

  • TRUCATE(숫자, 정수)
  • 정수에는 소수점을 몇번자리까지 표현할지 정합니다. 그 밑에 숫자는 다 버리고 정수의 경우 0으로 채워넣습니다.
  • TRUNCATE(12345.12345, -2); 이거 같은 경우는 -2 정수 2번째 자리까지 버립니다.

 

SELECT TRUNCATE(12000.12500,2) AS plus_truncate, TRUNCATE(12350.124800,-2) AS minus_truncate;

 

Document
plus_truncate minus_truncate
12000.12 12300
반응형
반응형

 

-- 사용 테이블 예제
DROP TABLE IF EXISTS product_order;

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);

INSERT INTO product_order(name, product, price) VALUES('   홍길동   ', 'zxTVzx', 5000);

 

 

📝LTRIM, RTRIM

  • LTRIM(문자열), RTRIM(문자열)
  • 문자열의 왼쪽, 오른쪽의 공백을 없애줍니다.
SELECT LTRIM(name) AS LTRIM, RTRIM(name) AS RTRIM
  FROM product_order;

 

Document
LTRIM RTRIM
홍길동 홍길동

 

📝TRIM

  • TRIM(문자열)
  • 문자열좌우 공백을 없애줍니다.
  • BOTH로 좌우 공백이 아니라 없앨 단어를 선정할 수도 있습니다.
SELECT TRIM(name) AS name FROM product_order;

 

Document
NAME
홍길동

 

📝REPEAT

  • REPEAT(문자열, 횟수)
  • 문자열을 횟수만큼 반복합니다.
SELECT REPEAT(product,3) AS 3_times FROM product_order;

 

Document
3_times
zxTvzxzxTvzxzxTvzx

 

 

📝REPLACE

  • REPLACE(문자열, 바꾸고 싶은 문자열, 바꿀 문자열)
  • 문자열에 바꾸고 싶은 문자열을 바꿀 문자열로 바꿉니다
SELECT REPLACE(price, 50, 800) AS new_price FROM product_order;

 

Document
new_price
80000

 

📝REVERSE

  • REVERSE(문자열)
  • 문자열을 거꾸로 뒤집습니다
SELECT REVERSE(TRIM(NAME)) AS NAME FROM product_order;

 

Document
NAME
동길홍
반응형
반응형
-- 사용 테이블 예제

DROP TABLE IF EXISTS product_order;

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);

 

📝INSERT

  • INSERT(적용문자열,위치길이삽입할 문자)
  • 위치에서 길이만큼 없애고 삽입할 문자를 그 안에 넣습니다

 

SELECT INSERT(NAME, 1, 2, '김순') AS change_name FROM product_order;

 

Document
change_name
김순동

 

📝LEFT, RIGHT

  • LEFT(문자열, 길이), RIGHT(문자열길이)
  • 왼쪽 또는 오른쪽에서 길이만큼 문자열을 반환합니다.

 

SELECT LEFT(NAME, 1) AS familly_name, RIGHT(NAME, 2) AS NAME FROM product_order;

 

Document
family_name name
길동

 

📝LOWER, UPPER

  • LOWER(문자열), UPPER(문자열)
  • LOWER대문자를 소문자UPPER소문자를 대문자로 바꿔줍니다.

 

SELECT LOWER('ABC') AS lower, UPPER('abc') AS upper;

 

Document
lower upper
abc ABC

 

📝LPAD

  • LPAD(문자열, 변경할 길이, 채울 문자열), RPAD(문자열, 변경할 길이채울 문자열)
  • 문자열길이만큼 늘리 빈 곳채울 문자열로 채워줍니다.

 

SELECT LPAD(NAME, 5, 'zx') AS LPAD , RPAD(NAME, 5, 'v') AS RPAD FROM product_order;

 

Document
LPAD RPAD
zx홍길동 홍길동vv

 

📝SPACE

  • SPACE(길이)
  • 길이만큼 공백을 만듭니다.
SELECT concat(SPACE(3), NAME, SPACE(3)) AS space_name FROM product_order;

 

Document
space_name
홍길동
반응형
반응형
-- 사용 테이블 예제

DROP TABLE IF EXISTS product_order;

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);

📝CHAR_LENGTH

  • CHAR_LENGTH(문자열)
  • 문자열의 길이를 반환합니다.

 

SELECT name ,CHAR_LENGTH(name) AS LENGTH FROM product_order;

 

 

Document
name lenght
홍길동 3

 

📝CONCAT

  • CONCAT(문자열문자열2)  or CONCAT_WS(구분자문자열문자열2)
  • 문자와 문자를 이어줍니다. 구분자를 이용하면 문자를 이을 때 구분자로 묶어줍니다.

 

SELECT CONCAT(NAME, ' ^ ', product, ' ^ ', price) AS concat FROM product_order;

 

Document
concat
홍길동^TV^5000

 

📝FORMAT

  • FORMAT(숫자,소수점 자리수)
  • 설정한 소수점 자리수까지만 표현합니다. 
# (1500.5035 일시 1500.5까지만 표시)
SELECT name ,FORMAT(price,1) AS new_format FROM product_order;

 

 

Document
name new_format
홍길동 5,000

📝SUBSTRING

  • SUBSTRING(문자열시작위치길이)
  • 문자열을 시작위치자리부터 길이만큼 출력합니다.

 

SELECT SUBSTRING(NAME, 2, 2) AS sub_name FROM product_order;

 

Document
sub_name
길동

 

반응형
반응형
-- 사용 테이블 예제

CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('김민지', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('김민수', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('이민지', '생수', 500);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '생수', 500);

 

📝CAST

  • CAST(변환시킬 값 AS (UN)SIGNED형변환 시킬 자료형)
SELECT CAST(AVG(price) AS INTEGER) AS '평균 구매금액' FROM product_order;

 

Document
평균 구매금액
5,000

 

📝CONVERT

  • CONVERT(변환시킬 값(UN)SIGNED 형변환 시킬 자료형)
SELECT CONVERT(AVG(price), INTEGER) AS '평균 구매금액' FROM product_order;

 

Document
평균 구매금액
5,000

 

📝IF

  • IF(수식, , 거짓)
SELECT  name, IF(price >= 5000, 'UP', 'DOWN') 
  FROM product_order
 GROUP BY name;

 

Document
name IF(price >=5000, 'UP', 'DOWN')
김민수 DOWN
김민지 UP
이민지 DOWN
홍길동 UP
홍길순 UP

 

 

📝IF NULL

  • IFNULL(수식1, NULL일 경우 반환 값)
SELECT IFNULL(NULL, 'true') AS is_null;

 

Document
is_null
true

 

📝CASE WHEN ELSE END

  • CASE... WHEN... ELSE... END
    • CASE에는 값이 들어가고 WHEN에는 각 해당 상황에 조건이 들어갑니다.
    • 조건이 맞으면 THEN을 실행합니다. 다 그렇지 않으면 ELSE를 실행합니다
    • CASE문이 다 끝나면 END를 마지막에 적어줘야합니다 

 

SELECT 
       name,
       CASE WHEN price = 500 THEN '생수입니다'
            WHEN price = 2000 THEN '컴퓨터입니다'
            WHEN price = 5000 THEN 'TV입니다'
            WHEN price = 10000 THEN '핸드폰입니다'
            ELSE '모르겠습니다'
       END AS '상품'
  FROM product_order;

 

Document
name 상품
홍길동 TV입니다
홍길동 핸드폰입니다
홍길순 핸드폰입니다
김민지 핸드폰입니다
홍길순 컴퓨터입니다
김민수 컴퓨터입니다
이민지 생수입니다
홍길동 생수입니다
반응형
반응형
-- 사용 테이블 예제
CREATE TABLE product_order(
	ID   INT AUTO_INCREMENT PRIMARY KEY,
	NAME VARCHAR(20),
	product VARCHAR(50),
	price INT
);


INSERT INTO product_order(name, product, price) VALUES('홍길동', 'TV', 5000);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('김민지', '핸드폰', 10000);
INSERT INTO product_order(name, product, price) VALUES('홍길순', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('김민수', '컴퓨터', 2000);
INSERT INTO product_order(name, product, price) VALUES('이민지', '생수', 500);
INSERT INTO product_order(name, product, price) VALUES('홍길동', '생수', 500);

📝SET

  • SET@변수이름 = 값;
    • 데이터베이스에서변수 선언은 이렇게 합니다.

 

SET @appleCount = 5;
SET @bananaCount = 15;

SELECT @appleCount AS appleCount;
SELECT @appleCount + @bananaCount AS total;

 

select * 
	from(SELECT @junho:=@junho+1 as wooram, A.* FROM mytable A, (SELECT @junho:=0) as R order by wooram desc) total 
where wooram > 259 and wooram <= 268;
  • select @junho:= 0
    • a = 0과 등치
  • @junho:=@junho+1
    • a = a + 1과 등치

 

즉 := 은 대입을 의미한다.

 

📝PREPARE, EXECUTE

  • PREPARE쿼리 이름을 만들고 FROM쿼리에 들어갈 내용을 적습니다.
  • PREPARE은 독자적으로 실행되진 않고 EXECUTE를 이용해야 실행이 됩니다.
  • USING은 ?값을 대입해주기 위해서 적은 것입니다. ?가 없다면 굳이 안 적어도 됩니다. 
SET @productName = "TV";

PREPARE productOrderQuery
   FROM 'SELECT name, product, price FROM product_order WHERE product = ?';
   
EXECUTE productOrderQuery USING @productName;

 

Document
name product price
홍길동 TV 5000
반응형