[DB] 함수

나무나무·2025년 3월 28일

DB

목록 보기
6/9
  • 따로 만들어 둔 서브 프로그램이라 생각하면 편함
  • 호출을 통해 필요한 값 전달, 결과를 반환

형 변환 함수

  • CAST(expression AS target_data_type)
  • CONVERT(expression, target_data_type)
  • MariaDB에서 CAST, CONVERT는 매우 유용하지만 모든 데이터로의 형 변환이 가능한 것은 아님.
  • <예제 코드>
    -- 형 변환 함수 실습
    
    SELECT 123456789; -- 이거 그냥 실행시키면 숫자 형태 데이터 그대로 출력됨ㅇㅇ
    -- tool에서 숫자 데이터는 파란색으로 표현됨
    
    -- 숫자 -> 문자 형 변환
    SELECT CONVERT(123456789, CHAR); -- 함수 호출
    -- 위의 쿼리 실행 시 문자열인 녹색으로 표현됨.
    
    SELECT CAST(123456789 AS CHAR); 
    
    -- usertbl에서 birthYear 열의 데이터를 형변환 할 예정
    
    SELECT NAME, 
    		CONVERT(birthYear, CHAR)
    FROM usertbl;
    -- 위의 방식은 각 행마다 실행됨. 
    
    -- 실수 데이터(소숫점 O) 를 정수 데이터(소숫점 X) 로 형변환
    -- buytbl에서 구입 개수의 평균을 정수로 변환(반올림)
    SELECT CAST(AVG(amount) AS INT)
    FROM buytbl;
    
    -- 문자 데이터를 숫자 데이터로 형 변환
    -- 숫자로 바꿀 때는 문자열도 숫자 형태를 띄어야 함
    -- 그러나 모든 유형으로의 형 변환이 가능하지는 않다. (10000000 -> TINY로의 변환은 x)
    SELECT CONVERT('10000000', INT);
    -- 아래처럼 3자리마다 ','를 붙이면 결과는 10으로 나오게 됨. 
    SELECT CONVERT('10,000,000', INT);
    SELECT CONVERT( REPLACE('10,000,000', ',', ''), INT) AS '결과'; 
    -- REPLACE(바꿀 문자 데이터, 바꿀 문자들, 뭘로 바꿀지?)
    
    -- 아래의 쿼리가 정상적으로 연산되도록 쿼리문 작성
    SELECT '1,000,000' - '500,000';
    /* 위의 경우 - 연산자는 피연산자로 숫자를 받아야 하기 때문에 자동으로 1,000,000에 CONVERT 연산을 하게 됨.
    위의 경우 CONVERT(1,000,000) -> 1 / CONVERT(500,000) -> 500의 결과를 갖기 때문에 최종 결과가 -449로 나타나게 된다.
    -> <묵시적 형변환> */
    
    SELECT CONVERT(REPLACE('1,000,000', ',' ,''), INT) -
    		CONVERT(REPLACE('500,000', ',' ,''), INT);
    
    SELECT '1000000' - '500000';
    SELECT REPLACE('1,000,000', ',' , '') - REPLACE('500,000', ',' , '');
    
    SELECT *
    FROM usertbl;
    
    -- mobile1의 데이터를 숫자 데이터로 변경
    SELECT NAME, 
    		CONVERT(mobile1, INT)
    FROM usertbl;
    -- 숫자 형태로 바꿀 경우 -> 앞의 0은 전부 생략됨
    
    -- 문자 데이터를 날짜 데이터로의 형변환
    SELECT CONVERT('2024-12-16', DATE);
    -- 빨간색은 날짜 데이터를 의미
    SELECT CONVERT('2024/12/16', DATE);
    SELECT CONVERT('2024%12%16', DATE);
    SELECT CONVERT('20241216', DATE);
    SELECT CONVERT('2024-12-16 12:36:17', DATETIME);
    
    SELECT CONVERT(20241216, DATE);
    SELECT CONVERT(123517, TIME);
    SELECT CONVERT(20241216123517, DATETIME);
    
    -- 얘네들은 다 오류 남
    SELECT CONVERT(2024, SMALLINT);
    SELECT CONVERT(2024, TINYINT);
    SELECT CONVERT(2024, YEAR); 
    
    -- < 묵시적 형변환 > 
    SELECT 100 + 200; -- 아무런 형 변환도 일어나지 않음
    SELECT '100' + 200; 
    SELECT '100' + '200'; 
    -- mariaDB에서는 산술 연산만(피연산자가 숫자밖에 없는) 형변환 가능
    -- 피연산자가 숫자로 바뀌는지 확인한 뒤, 이들끼리 더하기 연산을 실행.
    
    SELECT CONCAT('100', '200'); -- 문자와 문자 연결
    SELECT CONCAT(100, '200'); -- 정수가 문자로 변환되어 연결됨. 
    
    SELECT 1 > '2mega' ; -- 실행 결과로 0이 나옴. 
    -- 산술연산에서 크기 비교 -> 두 번째는 뮨자인데 숫자로 바꿀 수 있는 부분까지는 바꿔서 비교
    -- 결과적으로 1 > 2 의 비교 연산을 실행 -> 결과는 0(거짓)이 나오게 됨. 
    SELECT 3 > '2mega' ;
    -- 아래의 결과는 참을 의미하는 1이 출력되게 됨. 
    SELECT 0 = '0mega' ;
    -- 문자는 0으로 변환됨 -> 참을 의밀하는 1이 출력됨. 
    

제어 흐름 함수

  • IF(수식, 참일 때 출력할 값, 거짓일 때 출력할 값); : 실제 반환되는 값은 두 번째 인자나 세 번째 인자에 해당됨.
  • IFNULL(수식1, 수식2) : 수식1이 NULL이 아니면 수식1을 그대로, NULL이면 수식2가 출력됨 (NVL도 동일함)
  • NVL2(수식1, 수식2, 수식3) : 수식1이 NULL이면 수식3으로, NULL이 아니면 수식2로 나타남
    • 예제 코드
      -- 제어 흐름 함수 실습
      -- IF(수식, 참, 거짓)
      SELECT IF(100 > 200, '참', '거짓'); -- 거짓
      SELECT IF(100 < 200, '참', '거짓'); -- 참
      
      -- buytbl에서 userID로 그룹으로 묶은 뒤, 구매 개수가 10개 이상이면 VIP, 10개 미만이면 일반
      SELECT userID,
      		SUM(amount) AS '고객 별 구매개수', 
      		IF(SUM(amount) > 10, 'VIP 고객', '일반 고객') AS '고객등급'
      FROM buytbl
      GROUP BY userID
      ORDER BY `고객 별 구매개수` DESC;
      -- 별칭으로 정렬할 땐 backtik으로
      
      -- IFNULL 함수
      SELECT IFNULL(NULL, '값이 없음');
      SELECT IFNULL(100, '값이 없음');
      SELECT NVL(100, ' 값이 없음'); -- 얘도 똑같은 애. 버전에 따라 사용 가능할 수도, 불가능할 수 도 있음.
      
      -- buytbl에서 모든 데이터 출력, 단 GROUPNAME 값이 NULL 인 경우 없음으로 출력되도록
      SELECT num,
      		userID,
      		prodName,
      		IFNULL(groupName, '없음') AS 'groupName',
      		price,
      		amount
      FROM buytbl; 
      
      -- NVL2 함수
      SELECT NVL2(NULL, 100, 200),  NVL2(300, 100, 200);
      
      USE employees_db;
      
      -- 기존의 보너스가 있던 사람만 0.1로, NULL 이었던 사람은 그대로 NULL로
      -- 직원명, 보너스율, 보너스가 포함된 연봉 
      -- NVL2는 NULL인 경우와 NULL이 아닌 경우를 나눠서 설정이 가능함
      SELECT emp_name,
      		NVL2(bonus, 0.1, 0),
      		salary,
      		salary * 12,
      		((salary * NVL2(bonus, 0.1, 0)) + salary) * 12 AS '보너스 포함 연봉'
      FROM employee;
  • CASE ~
      `WHEN ~ THEN ~` 
    
      `ELSE ~` 
    END : if ~ else 구문과 같은 사용
    • 예제 코드
      -- CASE 연산자
      SELECT CASE 10
      			WHEN 1 THEN '일'
      			WHEN 5 THEN '오'
      			WHEN 10 THEN '십' 
      			ELSE '모름'
      		END AS '결과';
      
      -- else ~ if 구문과 같이 사용
      SELECT CASE 
      			WHEN 10 > 20 THEN '10 > 20'
      			WHEN 20 >= 10 THEN '20 >= 10'
      			ELSE '모름'
      		END AS '결과';
      
      -- 급여가 500만원을 초과할 경우 1등급 / 
      
      SELECT emp_name,
      		salary,
      		CASE
      			WHEN salary > 5000000 THEN '1등급'
      			WHEN salary > 3500000 THEN '2등급'
      			WHEN salary > 2000000 THEN '3등급'
      			ELSE '4등급'
      		END AS 'GRADE' 
      FROM employee
      ORDER BY `GRADE`, salary DESC;

문자열 함수

  • 함수표

    함수설명
    ASCII(문자)문자의 아스키코드를 반환하는 함수이다.
    CHAR(숫자)아스키코드값에 해당하는 문자를 반환하는 함수이다.
    BIT_LENGTH(문자열)문자열에 할당된 bit의 크기를 반환하는 함수이다.
    CHAR_LENGTH(문자열)문자열에 문자의 개수를 반환한다.
    LENGTH(문자열)문자열에 할당된 Byte 수를 리턴한다.
    `CONCAT(문자열 1, 문자열 2, ... )
    CONCAT_WS(구분자, 문자열 1, 문자열 2, ... )`문자열을 이어주는 함수이다.CONCAT_WS 함수는 구분자와 함께 문자열을 이어준다.
    ELT(위치, 문자열 1, 문자열 2, ...)위치 번째에 해당하는 문자열을 반환한다. 해당 문자가 없으면 0 을 반환하게 됨.
    FIELD(찾을 문자열, 문자열 1, 문자열 2, ...)찾을 문자열의 위치를 찾아서 반환한다.매치되는 문자열이 없으면 0을 반환한다.
    FIND_IN_SET(찾을 문자열, 문자열 리스트)찾을 문자열을 문자열 리스트에서 찾아서 위치를 반환한다.문자열 리스트는 콤마(,)로 구분되어 있어야 하며 공백은 없어야 한다.
    INSTR(기준 문자열, 부분 문자열)기준 문자열에서 부분 문자열을 찾아서 그 시작 위치를 반환한다.
    LOCATE(부분 문자열, 기준 문자열)INSTR() 함수와 동일하지만 파라미터의 순서가 반대로 되어 있다.LOCATE() 함수와 POSITION() 함수는 동일한 함수이다.
    FORMAT(숫자, 소수점 자릿수)숫자를 지정한 소수점 자릿수까지 표현하는 함수이다.또한 1000단위마다 콤마(,)를 표시해 준다.
    BIN(숫자)숫자의 2진수 값을 반환한다.
    HEX(숫자)숫자의 16진수 값을 반환한다.
    OCT(숫자)숫자의 8진수 값을 반환한다.
    INSERT(기준 문자열, 위치, 길이, 삽입할 문자열)기준 문자열의 위치부터 길이만큼을 지우고 삽입할 문자열을 끼워 넣는다.
    LEFT(문자열, 길이)왼쪽에서 문자열의 길이만큼 반환한다.
    RIGHT(문자열, 길이)오른쪽에서 문자열의 길이만큼 반환한다.
    UPPER(문자열)소문자를 대문자로 변경하는 함수이다.UPPER() 함수는 UCASE() 함수와 동일한 함수이다.
    LOWER(문자열)대문자를 소문자로 변경하는 함수이다.LOWER() 함수는 LCASE() 함수와 동일한 함수이다.
    LPAD(문자열, 길이, 채울 문자열)문자열을 길이만큼 왼쪽을 늘린 후에, 빈 곳을 채울 문자열로 채운다.
    RPAD(문자열, 길이, 채울 문자열)문자열을 길이만큼 오른쪽을 늘린 후에, 빈 곳을 채울 문자열로 채운다.
    LTRIM(문자열)문자열의 왼쪽 공백을 제거한다중간의 공백은 제거되지 않는다.
    RTRIM(문자열)문자열의 오른쪽 공백을 제거한다.중간의 공백은 제거되지 않는다.
    TRIM(문자열)문자열의 앞/뒤 공백을 모두 제거한다.
    TRIM(방향 자를 문자열 FROM 문자열)방향을 지정하면 해서 자를 문자열을 제거할 수 있다.방향은 LEADING(앞), TRAILING(뒤), BOTH(양쪽)로 지정한다.
    REPEAT(문자열, 횟수)문자열을 횟수만큼 반복한다.
    REPLACE(문자열, 원래 문자열, 바꿀 문자열)문자열에서 원래 문자열을 찾아서 바꿀 문자열로 바꿔준다.
    REVERSE(문자열)문자열의 순서를 거꾸로 만든다.
    SPACE(길이)길이 만큼의 공백을 반환한다.
    SUBSTRING(문자열, 시작 위치, 길이)SUBSTRING(문자열 FROM 시작 위치 FOR 길이)시작 위치부터 길이만큼 문자를 반환한다.길이가 생략되면 문자열의 끝까지 반환한다.SUBSTRING() 함수, SUBSTR() 함수, MID() 함수는 모두 동일한 함수이다.
    SUBSTRING_INDEX(문자열, 구분자, 횟수)문자열에서 구분자가 왼쪽부터 횟수 번째 나오면 그 이후의 오른쪽은 버린다.횟수가 음수이면 오른쪽부터 세고 왼쪽을 버린다.

  • MariaDB는 UTF-8 코드를 사용하기 때문에 영문자 하나 당 1byte(8bit), 그 외 언어의 경우 문자 하나당 3byte(24bit)를 사용함

  • <예제 코드>

    SELECT ASCII('A'), CHAR(65), ASCII('문'), CHAR(1);
    -- ascii에 문자를 주면 해당하는 아스키코드 수가 나오게 됨
    -- CHAR에 아스키코드를 넣으면 문자가 나오게 됨
    -- 16진수가 나오는 경우 : 그리드 뷰 옵션 -> 텍스트로 바이너리 조회
    
    -- BIT LENGTH, CHAR LENGTH, LENGHT 함수에 대해 봄
    -- mariaDB는 UTF-8 코드를 사용함.
    SELECT BIT_LENGTH('ABC'), CHAR_LENGTH('ABC'), LENGTH('ABC'); -- > 24, 3, 3 
    SELECT BIT_LENGTH('가나다'), CHAR_LENGTH('가나다'), LENGTH('가나다'); -- > 72, 3, 9 
    -- CHAR_LENGTH는 그냥 길이
    -- 영분자는 1byte(8byte), 다른 언어는 3byte(24bit)할당. 
    
    -- CONCAT, CONCAT_WS
    
    SELECT CONCAT('2024','12','16'); -- -> 하나의 문자 데이터로 출력해줌
    SELECT CONCAT_WS('-','2024','12','16'); -- -> 첫 번째 인자로 각 문자열들을 구분해주는 구분자를 지정,
    
    USE test_db;
    
    -- usertbl에서 아이디, 이름 전화번호
    SELECT userID, 
    		NAME, 
    		mobile1, 
    		mobile2,
    		CONCAT(mobile1, mobile2) AS '전체 전화번호',
    		CONCAT_WS('-', mobile1, SUBSTRING(mobile2, 1, 4), SUBSTRING(mobile2, 5, 8)) AS '-전화번호'
    FROM usertbl;
    
    -- employee 테이블에서 급여 조회
    USE employees_db;
    SELECT emp_name, 
    		salary,
    		CONCAT(emp_name, '님의 급여는 ', salary, '원 입니다.')
    FROM employee;
    
    -- ELT, FIELD, FIND_IN_SET, INSTR, LOCATE
    
    -- ELT : 지정한 위치의 매개변수 값 반환. 범위를 넘어서면 NULL 값이 반환됨. 
    SELECT ELT(2, '하나' , '둘', '셋' ) ; -- > 범위를 넘어서면 NULL 값 반환
    SELECT FIELD('둘', '하나', '둘', '셋'); -- > 두 번째 위치에 '둘'이 있네? -> 2라는 값 반환 / 없으면 0 반환
    SELECT FIND_IN_SET('둘', '하나,둘,셋'); -- > 콤마로 구분한 문자열 리스트에서 위치를 반환
    SELECT INSTR('하나둘셋', '둘'); -- > 글자 하나하나씩 보면서 처음으로 나오는 위치를 반환
    SELECT LOCATE('둘', '하나 둘 셋'); -- > 위의 INSTR이랑 매개변수 위치만 반대임
    
    -- email의 @위치값 출력
    -- 추후 문자열 자르기를 할 때 이 위치반환값이 유용하게 쓰일테니 기억해두자
    SELECT emp_name,
    		email,
    		INSTR(email, '@')
    FROM employee;
    
    -- FOMRAT 함수
    SELECT CONVERT(1234567, CHAR);
    SELECT FORMAT(1234567, 0); -- 1000 단위마다 ,를 찍어줌
    SELECT FORMAT(1234.567, 2); -- > 지정한 소숫점 자리까지만 표현(반올림)
    SELECT FORMAT(1234.567, 0); -- > 소숫점은 반올림, 나머지 1000 단위 별로 , 찍기
    
    -- INSERT 함수
    SELECT INSERT('abcdefghi', 3, 4, '####'); -- > 3번째 문자열부터 4개의 문자열을 전부 #으로 바꿔줌 
    
    -- 주민등록번호에서 성별 코드를 제외한 나머지 masking 처리가 가능함
    
    USE employees_db;
    -- 사원명 주민등록번호 조회(뒷자리 마스킹 처리)
    SELECT emp_name,
    		INSERT(emp_no, 9, 6, '******')
    FROM employee;
    
    -- LEFT, RIGHT -> 각 방향 별로 주어진 길이만큼 잘라서 반환하는 함수
    SELECT LEFT('abcdefghi', 3), RIGHT('abcdefghi', 3);
    
    -- email에서 @ 이전의 아이디 값을 조회
    SELECT emp_name,  
    		email, 
    		LEFT(email, INSTR(email, '@') -1) AS 'id'
    FROM employee;
    
    -- UPPER, LOWER 함수
    SELECT UPPER('abcdefghi');  -- > 소문자들을 대문자로 바꿈
    SELECT LOWER('ABCDEFGHI');  -- > 대문자들을 소문자로 바꿈
  • <예제 코드>

        SELECT ASCII('A'), CHAR(65), ASCII('문'), CHAR(1);
        -- ascii에 문자를 주면 해당하는 아스키코드 수가 나오게 됨
        -- CHAR에 아스키코드를 넣으면 문자가 나오게 됨
        -- 16진수가 나오는 경우 : 그리드 뷰 옵션 -> 텍스트로 바이너리 조회
        
        -- BIT LENGTH, CHAR LENGTH, LENGHT 함수에 대해 봄
        -- mariaDB는 UTF-8 코드를 사용함.
        SELECT BIT_LENGTH('ABC'), CHAR_LENGTH('ABC'), LENGTH('ABC'); -- > 24, 3, 3 
        SELECT BIT_LENGTH('가나다'), CHAR_LENGTH('가나다'), LENGTH('가나다'); -- > 72, 3, 9 
        -- CHAR_LENGTH는 그냥 길이
        -- 영분자는 1byte(8byte), 다른 언어는 3byte(24bit)할당. 
        
        -- CONCAT, CONCAT_WS
        
        SELECT CONCAT('2024','12','16'); -- -> 하나의 문자 데이터로 출력해줌
        SELECT CONCAT_WS('-','2024','12','16'); -- -> 첫 번째 인자로 각 문자열들을 구분해주는 구분자를 지정,
        
        USE test_db;
        
        -- usertbl에서 아이디, 이름 전화번호
        SELECT userID, 
        		NAME, 
        		mobile1, 
        		mobile2,
        		CONCAT(mobile1, mobile2) AS '전체 전화번호',
        		CONCAT_WS('-', mobile1, SUBSTRING(mobile2, 1, 4), SUBSTRING(mobile2, 5, 8)) AS '-전화번호'
        FROM usertbl;
        
        -- employee 테이블에서 급여 조회
        USE employees_db;
        SELECT emp_name, 
        		salary,
        		CONCAT(emp_name, '님의 급여는 ', salary, '원 입니다.')
        FROM employee;
        
        -- ELT, FIELD, FIND_IN_SET, INSTR, LOCATE
        
        -- ELT : 지정한 위치의 매개변수 값 반환. 범위를 넘어서면 NULL 값이 반환됨. 
        SELECT ELT(2, '하나' , '둘', '셋' ) ; -- > 범위를 넘어서면 NULL 값 반환
        SELECT FIELD('둘', '하나', '둘', '셋'); -- > 두 번째 위치에 '둘'이 있네? -> 2라는 값 반환 / 없으면 0 반환
        SELECT FIND_IN_SET('둘', '하나,둘,셋'); -- > 콤마로 구분한 문자열 리스트에서 위치를 반환
        SELECT INSTR('하나둘셋', '둘'); -- > 글자 하나하나씩 보면서 처음으로 나오는 위치를 반환
        SELECT LOCATE('둘', '하나 둘 셋'); -- > 위의 INSTR이랑 매개변수 위치만 반대임
        
        -- email의 @위치값 출력
        -- 추후 문자열 자르기를 할 때 이 위치반환값이 유용하게 쓰일테니 기억해두자
        SELECT emp_name,
        		email,
        		INSTR(email, '@')
        FROM employee;
        
        -- FOMRAT 함수
        SELECT CONVERT(1234567, CHAR);
        SELECT FORMAT(1234567, 0); -- 1000 단위마다 ,를 찍어줌
        SELECT FORMAT(1234.567, 2); -- > 지정한 소숫점 자리까지만 표현(반올림)
        SELECT FORMAT(1234.567, 0); -- > 소숫점은 반올림, 나머지 1000 단위 별로 , 찍기
        
        -- INSERT 함수
        SELECT INSERT('abcdefghi', 3, 4, '####'); -- > 3번째 문자열부터 4개의 문자열을 전부 #으로 바꿔줌 
        
        -- 주민등록번호에서 성별 코드를 제외한 나머지 masking 처리가 가능함
        
        USE employees_db;
        -- 사원명 주민등록번호 조회(뒷자리 마스킹 처리)
        SELECT emp_name,
        		INSERT(emp_no, 9, 6, '******')
        FROM employee;
        
        -- LEFT, RIGHT -> 각 방향 별로 주어진 길이만큼 잘라서 반환하는 함수
        SELECT LEFT('abcdefghi', 3), RIGHT('abcdefghi', 3);
        
        -- email에서 @ 이전의 아이디 값을 조회
        SELECT emp_name,  
        		email, 
        		LEFT(email, INSTR(email, '@') -1) AS 'id'
        FROM employee;
        
        -- UPPER, LOWER 함수
        SELECT UPPER('abcdefghi');  -- > 소문자들을 대문자로 바꿈
        SELECT LOWER('ABCDEFGHI');  -- > 대문자들을 소문자로 바꿈
        ```

수학 함수

  • 함수표
    함수설명
    ABS(숫자)숫자의 절댓값을 계산한다.
    ACOS(숫자)ASIN(숫자)ATAN(숫자)ATAN2(숫자 1, 숫자 2)SIN(숫자)COS(숫자)TAN(숫자)삼각 함수와 관련된 함수를 제공한다.
    CEILING(숫자)숫자를 올림하여 반환한다.CEILING()과 CEIL()은 동일한 함수이다.
    FLOOR(숫자)숫자를 내림하여 반환한다.
    ROUND(숫자)숫자를 반올림을 반환한다.
    TRUNCATE(숫자, 정수)숫자를 소수점을 기준으로 정수 위치까지 구하고 나머지는 버린다.
    CONV(숫자, 원래 진수, 변환할 진수)숫자를 원래 진수에서 변환할 진수로 계산한다.
    DEGREES(숫자)라디안 값을 각도 값으로 변환한다.
    RADIANS(숫자)각도 값을 라디안 값으로 변환한다.
    PI()PI 값인 3.141592를 반환한다.
    EXP(X)LN(숫자)LOG(숫자)LOG(밑수, 숫자)LOG2(숫자)LOG10(숫자)지수, 로그와 관련된 함수를 제공한다.
    MOD(숫자 1, 숫자 2)숫자 1 % 숫자 2숫자 1 MOD 숫자 2숫자 1을 숫자 2로 나눈 나머지 값을 구한다.
    POW(숫자)숫자의 거듭제곱 값을 반환한다.POW()와 POWER() 함수는 동일한 함수다.
    SQRT(숫자)숫자의 제곱근을 반환한다.
    RAND()0 이상 1 미만의 실수를 구한다.
    SIGN(숫자)숫자가 양수, 0, 음수인지를 구한다.결과는 1, 0, -1 셋 중에 하나를 반환한다.

  • <예제 코드>
    -- 수학 함수
    SELECT CEILING(4.3); -- 숫자 올림
    SELECT FLOOR(4.7); -- 숫자 내림
    SELECT ROUND(3.5); -- 숫자 반올림
    SELECT ROUND(3.2); 
    
    SELECT ROUND(4.3555, 0); -- 정수부분만 출력
    SELECT ROUND(4.3522, 2); -- 소숫점 2자리까지 출력
    SELECT ROUND(12.3134515, -1); -- 소수점 왼쪽(일의 자리)에서 반올림한다는 의미.
    
    SELECT TRUNCATE(123.3456, 0); -- 소수점 첫 째자리에서부터 버림
    SELECT TRUNCATE(123.2336, 2); -- 소수점 두 번째 자리까지만 출력, 그 뒤는 전부 버림
    SELECT TRUNCATE(123.2342345, -1); -- 일의자리부터 버림
    SELECT TRUNCATE(12345.234245, -3); -- 백의 자리부터 버림
    
    SELECT MOD(157, 10); -- 157을 10으로 나눈 나머지
    SELECT RAND(); -- 0부터 1사이의 랜덤 값이 출력됨
    SELECT RAND() * 100 ; -- 0부터 100 사이의 임의의 값이 출력됨
    SELECT ROUND (RAND() * 1000); -- 0부터 1000까지 임의의 정수 출력
profile
백엔드 개발자 나무입니다

0개의 댓글