ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQLite 4. 연산 필드, 문자열 함수, DATETIME 함수
    SQL/Sqlite 2021. 12. 29. 22:09
    반응형

    [선수명] is [팀명]'s [포지션] 이라는 문자열을 만들어 보자. 
    ex) Dallas McPherson is ANA 's Third Baseman

    컬럼 자리에 문자열을 사용할 수 있다. 

    SELECT Name, ' is ', Team, "'s ", Position 
    FROM mlb_players

     

    이제 합치기만 하면 되는데... 

    SELECT Name||' is '||Team||"'s "||Position 
    FROM mlb_players

    || 으로 문자열을 합칠 수 있다. 

     

    컬럼명이 예술이다. 
    AS를 사용해서 바꿀 수 있다. 

    SELECT Name||' is '||Team||"'s "||Position AS name_team_position
    FROM mlb_players

     

    컬럼과 필드는 같은 말이지만,
    연산 시에는 필드를 많이 쓰고,
    일반적으론 컬럼을 많이 쓴다. 

     

    숫자 연산

    SELECT Name, "Height(inches)" * 2.54 AS "Height(cm)"
    FROM mlb_players
    ORDER BY "Height(cm)"

    인치에 2.54를 곱하면 센티미터이다. 

     

    컬럼 간 연산도 가능하다.
    비만도를 계산해보자. 

    SELECT 
    	Name, 
    	"Weight(lbs)",
    	"Height(inches)", 
    	703*"Weight(lbs)"/"Height(inches)"/"Height(inches)" AS BMI
    FROM mlb_players
    ORDER BY "BMI"

    SQlite에서는 별도의 컴파일 과정을 거쳐야
    제곱 함수를 쓸 수 있기 때문에
    Height를 2번 나눠주었다. 
    https://www.sqlite.org/lang_mathfunc.html

    주의: "Weight(lbs)"/"Height(inches)"/"Height(inches)"*703으로 연산하면 0이 나올 것이다. 

     

    원문을 참고하여 다양한 내장 함수들의 사용법을 익혀보자..... 
    https://www.sqlite.org/lang_corefunc.html

     

    SQLite 내장 문자열 함수

    LOWER(X) 문자열 X를 소문자로 변경 후 반환
    UPPER(X) 문자열 X를 대문자로 변경 후 반환
    LENGTH(X) 문자열 X의 길이를 반환
    TRIM(X, Y) 문자열 X의 양 끝에서 Y를 제거한 결과를 반환
    LTRIM(X, Y) 문자열 X의 왼쪽 끝에서 Y를 제거한 결과를 반환
    RTRIM(X, Y) 문자열 X의 오른쪽 끝에서 Y를 제거한 결과를 반환
    SUBSTR(X, Y, Z) 문자열 X의 Y번째 위치로 부터 Z개 만큼의 부분 문자열을 반환
    REPLACE(X, Y, Z) 문자열 X 중에서 Y와 일치하는 문자열을 Z로 교체 후 반환
    INSTR(X, Y) 문자열 X 중에서 Y가 처음으로 출현(일치)하는 위치를 반환, 없으면 0

     

    아래와 같이 간단하게 연습할 수 있다. 

     

    시간 함수

    https://www.sqlite.org/lang_datefunc.html

    DB에서 적절한 예를 찾지 못했지만, 
    만약 Birthday라는 DATETIME 컬럼이 있었다면, 
    이렇게 검색할 수 있다. 

    SELECT * 
    FROM mlb_players 
    WHERE strftime('%Y', Birthday)=1990

    SQlite는 DATETIME 형이 없다.
    대신 TEXT 형, REAL 형, INTEGER형으로도 시간을 기록할 수 있다. 

    TEXT 형에는 "YYYY-MM-DD HH:MM:SS.SSS" 형식(ISO8601)으로 기록된다..
    REAL 형에는 BC4714-11-24 을 기준으로 하는 줄리안 일로 기록된다. 
    INTEGER 형에는 1970-01-01 00:00:00 UTC을 기준으로 하는 유닉스의 시간 포맷으로 기록된다.

    결국 다 지원하는... 

    'TEXT' 형으로 기록 되었을 때, 읽을 때는 strftime 함수로 문자열을 시간으로 바꾼다.
    위의 예에서는 %Y로 연도만 추출해서 1990이라는 숫자와 비교한 것이다. 

    반응형
Designed by Tistory.