MySql-1行関数1(文字列、数値、日付)

14220 ワード

1.単一行関数の定義


1.単一行関数?vsグループ関数?

  • 単行関数「個別」は複数のテーブルデータ(レコード)に適用され、
  • が計算される.
  • 組の関数は同時に複数(記録)を入力し、「結果値」
  • を計算する.

    2.単一行関数タイプ



    1.String相関関数


    https://dev.mysql.com/doc/refman/8.0/en/string-functions.html



    [SingleRow1_String.sql]
    -- lower(), upper()
    
    SELECT 'Hello', lower('Hello'), upper('Hello');
    
    -- t_student 테이블 : 1전공(deptno1) 이 201번인 학생들의
    -- ID를 이름과 함께 소문자, 대문자로 출력 / upper() 사용
    
    SELECT name, id, lower(id) 소문자, upper(id) 대문자
    FROM t_student WHERE deptno1 = 201;
    
    -- -------------------------------------
    -- concat(문자열, 문자열, ...)
    
    SELECT concat(name, ' ', POSITION) 교수님명단
    FROM t_professor WHERE deptno = 101
    ;
    
    #---------------------------------------------
    #-- SUBSTR 함수
    #-- 구문: SUBSTR( ‘문자열’ 또는 컬럼명,   시작위치,  추출할 글자수 )
    #-- 문자열에서 특정 길이의 문자를 추출할 때 사용하는 함수
    #-- 시작위치, 음수 가능.
    #-- ★ 시작 인덱스가 1부터 시작한다 (인덱스는 1부터 시작)
    
    SELECT substr('ABCDE', 2, 3); # 2번째부터 3개의 문자 추출
    SELECT substr('ABCDE', 20, 3);	-- EMPTY 문자열 (에러 아니다. NULL도 아니다)
    SELECT substr('ABCDE', -2, 2);	-- 음수 인덱싱 가능
    
    
    -- #4108
    SELECT name, substr(jumin, 1, 6) 생년월일
    FROM t_student 
    WHERE substr(jumin, 3, 2) = '08'
    
    
    -- 실습: #4109 쿼리
    -- t_student 테이블 : 4학년 학생들중 ‘여학생’ 들의 이름과 주민번호 출력 / substr() 사용
    SELECT name, jumin FROM t_student
    WHERE substr(jumin, 7, 1) IN ('2', '4') AND grade = 4;

    2.数値関数



    [SingleRow4_Number.sql]
    -- ROUND()
    SELECT
    	'ROUND'
    	, ROUND(12.34) "(12.34)"	-- 12 소숫점 이하 반올림
    	, ROUND(12.536) "(12.536)"
    	, ROUND(12.536, 2) "(12.536, 2)"	-- 소숫점 3자리에서 반올림
    	, ROUND(16.345, -1) "(16.345, -1)"
    	;
    
    -- TRUNCATE() 
    SELECT
    	'TRUNCATE'
    	, TRUNCATE(12.345, 0) "(12.345, 0)"
    	, TRUNCATE(12.345, 2) "(12.345, 2)"		-- 소숫점 3자리부터 자름.
    	, TRUNCATE(12.345, -1) "(12.345, -1)"	-- 1의 자리부터 자름.
    	;
    
    -- MySQL 은 % 연산자 없음
    -- MOD() : 나머지 연산 함수
    
    SELECT
    	MOD(12, 10), MOD(12.6, 4.1)
    	;
    
    -- power() : 제곱
    SELECT
    	power(3, 2)
    	, power(-3, 3)
    	, power(10, -2)
    	, power(2, 1/2)
    	;

    3.日付関数


    日付は文字列のように「」で囲まれています
    SELECT 
    DATEDIFF(2015-10-26,2014-09-23);


    [SingleRow5_DateTime]
    SELECT * FROM t_professor;
    
    -- null 값과의 연산 결과는 언제나 null 이다
    SELECT name, pay, bonus, pay + bonus
    FROM t_professor;
    
    # IFNULL : NULL값을 만나면 다른 값으로 치환해서 출력하는 함수
    # ISNULL : NULL 인지 체크하는 함수 (null 이면 1, 아니면 0 리턴)
    # IF : 첫번째 인자가 true 이면 두번째 값을, false 이면 세번째 값!
    
    
    SELECT bonus, ifnull(bonus, 0), isnull(bonus), if(bonus, bonus, 0)	-- null값은 거짓판정
    FROM t_professor;
    
    
    SELECT name, pay, bonus, pay + ifnull(bonus, 0) "총지급액"
    FROM t_professor;