SQL

SQL 문법정리 : 데이터타입Boolean,Character,Numeric,Time, Arrays, JSON

Nova 2021. 2. 22. 16:56

SQL 문법정리 : 데이터타입Boolean,Character,Numeric,Time, Arrays, JSON

 

Boolean

참과 거짓의 값을 저장한다.

 

거짓
TRUE FALSE
't' 'f'
'true' 'false'
'y' 'n'
'yes' 'no'
'1' '0'

CREATE TABLE STOCK_AVAILABILITY

(

 PRDOCUT_ID INT NOT NJLL PRIMARY KEY

,AVAILABLE BOOLEAN NOT NULL

);

 

INSERT INTO STOCK_AVAILABLITY (PRODUCT_ID, AVAILABLE)

VALUES

 (100, TRUE),

 (200, FALSE),

 (300, 't'),

 (400, '1').

 (500, 'y'),

 (600, 'yes'),

 (700, 'no'),

 (800, '0');

 

SELECT * FROM STOCK_AVAILABILITY;

 WHERE

   AVALIABLE

;

 

 

SELECT * FROM STOCK_AVAILABILITY

 WHERE

   AVAILABLE = 'YES';

 

 

Character

. CHAR

고정형 길이의 문자열을 저정한다.

만약 CHAR(10)인데 'ABCDE'만 입력할 경우 실제로는 'ABCDE     '로 뒤에 공백을 붙여 저장한다.

 

. VARCHAR

가변형 길이의 문자열을 저장한다.

만약 VARCHAR(10)인데 'ABCDE'만 입력할 경우 실제로 'ABCDE'만 저장한다.(뒤에 공백을 붙이지 않는다.)

 

. TEXT

대용량의 문자데이터를 저장한다.

 

Numeric

. INT

정수형 데이터를 저장한다.  크기는 4BYTE이다.

(범위는 -2,147,486,648 to 2,147,483,647)

 

. SMALLINT

정수형 데이터를 저장한다. 크기는 2BYTE이다.

(범위는 -32,768 to 32,767)

 

. float

부동 소수점의 데이터를 저장한다. 크기는 8BYTE이다.

 

. numeric

NUMERIC(15,2)와 같이 전체 크기와 소수점의 자리를 지정할 수있다.

 

CREATE TABLE

DATA_TYPE_TEST_1

(

  A_BOOLEAN BOOLEAN

 ,B_CHAR CHAR(10)

 ,C_VARCHAR VARCHAR(10)

 ,D_TEXT TEXT

 ,E_INT INT

 ,F_SMALLINT SMALLINT

 ,G_FLOAT FLOAT

 ,H_NUMERIC NUMERIC(15,2)

);

 

 

INSERT INTO

DATA_TYPE_TEST1

VALUES

(

   TRUE

  ,'ABCED'

  ,'ABCED'

  ,'TEXT'

  ,1000

  ,10.12345

  ,10.25

);

 

 

Time, Arrays, JSON

Time

. DATE

일자 데이터를 저장한다.

 

SQL문 결과 설명
SELECT NOW()::DATE; 2019-05-07 데이터 베이스 기준 현재 일자를 가져온다.
SELECT CURRENT_DATE; 2019-05-07 데이터 베이스 기준 현재 일자를 가져온다.
SELECT TO_CHAR(NOW()::DATE,'dd/mm/yyyy'); 07/05/2019 TO_CHAR를 이용하여 다른 형태의 포맷으로 가져올수 있다.
SELECT TO_CHAR(NOW()::DATE,'Mon dd, yyyy'); May 07,2019 TO_CHAR를 이용하여 다른 형태의 포맷으로 가져올수 있다.

* 다양한 일자 계산

SELECT

   FIRST_NAME

  ,LAST_NAME

  ,NOW() - CREATE_DATE AS DIFF

FROM

 CUSTOMER;

 

SELECT

   FIRST_NAME

, LAST_NAME

,AGE(CREATE_DATE) AS DIFF

FROM

 CUSTOMER;

* AGE함수로 나이 계산도 가능하다.

 

SELECT

   FIRST_NAME

  ,LAST_NAME

  ,EXTRACT(YEAR FROM CREATE_DATE) AS YEAR

  ,EXTRACT(MONTH FROM CREATE_DATE) AS MONTH

  ,EXTRACT(DAY FROM CREATE_DATE) AS DAY

FROM

  CUSTOMER;

 

* EXTRACT함수로 년,월, 일을 추출할수 있다.

 

 

. TIME

시간 데이터를 저장한다.

SQL문 결과 설명
SELECT CURRENT_TIME; 22:07:30.584992+09 데이터 베이스 기준 현재 시간을 가져온다.
SELECT LOCALTIME; 22:07:40.792433 데이터 베이스 기준 현재 시간을 가져온다.

 

SELECT

    LOCALTIME,

    EXTRACT(HOUR FROM LOCALTIME) AS HOUR,

    EXTRACT(MINUTE FROM LOCALTIME) AS MINUTE,

    EXTRACT(SECOND FROM LOCALTIME) AS SECOND

;

 

* EXTRACT함수로 시, 분, 초를 추출할 수 있다

 

시간계산

SELECT TIME '10:00' - TIME '02:00' AS DIFF;

SELECT TIME '10:59' - TIME '02:01' AS DIFF;

SELECT TIME '10:59:59' - TIME '02:01:01'  AS DIFF;

 

SELECT

       LOCALTIME

       ,LOCALTIME + INTERVAL '2 HOURS' AS PLUS_2HOURS

       ,LOCALTIME + INTERVAL '2 HOURS' AS MINUS_2HOURS

 

*INTERVAL을 이용하여 시간 계산이 가능하다.

 

 

. TIMESTAMP

일자와 시간 데이터를 모두 저장한다.

SQL문 결과 설명
SELECT NOW(); 2019-05-08 22:13:08.075995+09 데이터 베이스 기준 현재 일자 및 시간을 가져온다.
SELECT CURRENT_TIMESTAMP; 2019-05-08 22:14:30.917515+09 데이터 베이스 기준 현재 일자 및 시간을 가져온다.
SELECT TIMEOFDAY(); Wed May 08:22:15:17/864659 2019KST 데이터 베이스 기준 현재 일자 및 시간에 요일까지 가져온다.

* 다양한 형태의 시간 포맷을 문자열 출력

SELECT

        TO_CHAR(current_timestamp, 'YYYY')

        ,TO_CHAR(current_timestamp, 'YYYY-MM')

        ,TO_CHAR(current_timestamp, 'YYYY-MM-DD')

        ,TO_CHAR(current_timestamp, 'YYYY-MM-DD HH24')

        ,TO_CHAR(current_timestamp, 'YYYY-MM-DD HH24:MI')

        ,TO_CHAR(current_timestamp, 'YYYY-MM-DD HH24:MI:SS')

        ,TO_CHAR(current_timestamp, 'YYYY-MM-DD HH24:MI:SS.MS')

        ,TO_CHAR(current_timestamp, 'YYYY-MM-DD HH24:MI:SS.US')

;

 

 

 

 

Arrays

. arrary

배열 형식의 데이터를 저장한다. 

한개의 컬럼의 여러개의 데이터를 동시에 저장할수 있으며 저장한 데이터의 순서로 조회할 수 있다.

 

 

 

JSON

. JSON

JSON형식의 데이터를 저장한다.

JSON형식의 데이터를 입력해서 JSON형식대로 각 LEVEL의 데이터를 저장 할 수 있다.

 

CREATE TABLE DATA_TYPE_TEST_2

(

 A_DATE DATE

 ,B_TIME TIME

 ,C_TIMESTAMP TIMESTAMP

 ,D_ARRAY TEXT[]

 ,E_JSON JSON

);

 

INSERT INTO DATA_TYPE_TEST_2

VALUES

(

CURRENT _DATE

 ,LOCALTIME

 ,CURRENT_TIMESTAMP

 ,ARRAY[' 010 -1234-1234','010-2345-2345']

 , '{'customer':'John Doe','itmes:{'prdocut':'Beer','qty',6}}

)

;