부울, 문자, 숫자, 임시, 배열, json, uuid 및 특수 유형을 포함한 PostgreSQL 데이터 유형
Boolean
- 참, 거짓, null
- 1, yes, y, t, true -> true
- 0, no, flase, f -> false
true | false |
‘t’ | ‘f ‘ |
‘true’ | ‘false’ |
‘y’ | ‘n’ |
‘yes’ | ‘no’ |
‘1’ | ‘0’ |
CREATE TABLE stock_availability (
product_id INT PRIMARY KEY,
available BOOLEAN NOT NULL
);
INSERT INTO stock_availability (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 available = 'yes';
Character
- CHAR(n) : 공백이 채워진 고정 길이 문자입니다. 열 길이보다 짧은 문자열을 삽입하면 PostgreSQL이 공백을 채웁니다. 열 길이보다 긴 문자열을 삽입하면 PostgreSQL에서 오류가 발생합니다.
- VARCHAR(n) : 가변 길이 문자열입니다. 를 사용하면 VARCHAR(n)최대 n문자를 저장할 수 있습니다 . PostgreSQL은 저장된 문자열이 열의 길이보다 짧을 때 공백을 채우지 않습니다.
- TEXT : 가변 길이 문자열입니다. 이론적으로 텍스트 데이터는 길이가 무제한인 문자열입니다.
CREATE TABLE character_tests (
id serial PRIMARY KEY,
x CHAR (1),
y VARCHAR (10),
z TEXT
);
INSERT INTO character_tests (x, y, z)
VALUES( 'Y','varchar(n)','This is a very long text for the PostgreSQL text column'
);
Numeric
정수
PostgreSQL에는 세 가지 종류의 정수가 있습니다.
- 작은 정수( SMALLINT)는 -32,768에서 32,767 사이의 범위를 갖는 2바이트 부호 있는 정수입니다.
- 정수( INT)는 -2,147,483,648에서 2,147,483,647 사이의 4바이트 정수입니다.
- Serial 은 PostgreSQL이 자동으로 값을 생성하여 SERIAL열에 채운다는 점을 제외하고 정수와 동일합니다 . 이것은 AUTO_INCREMENT MySQL의 AUTOINCREMENT 열 또는 SQLite의 열과 유사합니다 .
부동 소수점 숫자
부동 소수점 숫자에는 세 가지 주요 유형이 있습니다.
- float(n) 정밀도가 최소 n, 최대 8바이트인 부동 소수점 숫자입니다.
- real또는 float84바이트 부동 소수점 숫자입니다.
- numeric 또는 numeric(p,s) 소수점 뒤에 s가 있는 p 자리의 실수입니다. numeric(p,s)는 정확한 숫자입니다.
DROP TABLE IF EXISTS products;
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price NUMERIC(5,2)
);
INSERT INTO products (name, price)
VALUES ('Phone',500.215),
('Tablet',500.214);
UPDATE products
SET price = 'NaN'
WHERE id = 1;
반응형
Temporal data types
시간 데이터 유형을 사용하면 날짜 및/또는 시간 데이터를 저장할 수 있습니다.
- DATE날짜만 저장합니다.
- TIME시간 값을 저장합니다.
- TIMESTAMP날짜와 시간 값을 모두 저장합니다.
- TIMESTAMPTZ시간대 인식 타임스탬프 데이터 유형입니다. 시간대가 있는 타임스탬프 의 약어입니다 .
- INTERVAL 기간을 저장합니다.
TIMESTAMPTZ은 표준 SQL의 시간 데이터 유형에 PostgreSQL을의 확장입니다.
1) DATE
DROP TABLE IF EXISTS employees;
CREATE TABLE employees (
employee_id serial PRIMARY KEY,
first_name VARCHAR (255),
last_name VARCHAR (355),
birth_date DATE NOT NULL,
hire_date DATE NOT NULL
);
INSERT INTO employees (first_name, last_name, birth_date, hire_date)
VALUES ('Shannon','Freeman','1980-01-01','2005-01-01'),
('Sheila','Wells','1978-02-05','2003-01-01'),
('Ethel','Webb','1975-01-01','2001-01-01');
-- 현재 시간
SELECT NOW()::date;
-- 특정 포맷
SELECT TO_CHAR(NOW() :: DATE, 'dd/mm/yyyy');
-- 두 기간 사이
SELECT
first_name,
last_name,
now() - hire_date as diff
FROM
employees;
-- 특정일까지의 나이 계산
SELECT
employee_id,
first_name,
last_name,
age('2021-01-01',birth_date)
FROM
employees;
-- 특정 값 추출
SELECT
employee_id,
first_name,
last_name,
EXTRACT (YEAR FROM birth_date) AS YEAR,
EXTRACT (MONTH FROM birth_date) AS MONTH,
EXTRACT (DAY FROM birth_date) AS DAY
FROM
employees;
2) TIMESTAMP
CREATE TABLE timestamp_demo (
ts TIMESTAMP,
tstz TIMESTAMPTZ
);
SET timezone = 'America/Los_Angeles';
-- 다음으로 확인가능
SHOW TIMEZONE;
INSERT INTO timestamp_demo (ts, tstz)
VALUES('2016-06-22 19:10:25-07','2016-06-22 19:10:25-07');
SELECT
ts, tstz
FROM
timestamp_demo;
3) INTERVAL
@ interval [ fields ] [ (p) ]
SELECT
now(),
now() - INTERVAL '1 year 3 hours 20 minutes'
AS "3 hours 20 minutes ago of last year";
-- 간격 연산자
SELECT
INTERVAL '2h 50m' + INTERVAL '10m'; -- 03:00:00
SELECT
INTERVAL '2h 50m' - INTERVAL '50m'; -- 02:00:00
SELECT
600 * INTERVAL '1 minute'; -- 10:00:00
-- 문자열 전환
SELECT
TO_CHAR(
INTERVAL '17h 20m 05s',
'HH24:MI:SS'
);
-- 간격에서 추출
SELECT
EXTRACT (
MINUTE
FROM
INTERVAL '5 hours 21 minutes'
);
4) TIME
HH:MI
HH:MI:SS
HHMISS
--
01:02
01:02:03
010203
---
MI:SS.pppppp
HH:MI:SS.pppppp
HHMISS.pppppp
--
04:59.999999
04:05:06.777777
040506.777777
CREATE TABLE shifts (
id serial PRIMARY KEY,
shift_name VARCHAR NOT NULL,
start_at TIME NOT NULL,
end_at TIME NOT NULL
);
INSERT INTO shifts(shift_name, start_at, end_at)
VALUES('Morning', '08:00:00', '12:00:00'),
('Afternoon', '13:00:00', '17:00:00'),
('Night', '18:00:00', '22:00:00');
-- 현재 시간 가져오기
SELECT CURRENT_TIME;
-- 현지 시간 가져오기
SELECT LOCALTIME;
-- 시간대 변환
[TIME with time zone] AT TIME ZONE time_zone
SELECT LOCALTIME AT TIME ZONE 'UTC-7';
-- 시간 값에서 시 분 초 추출
EXTRACT(field FROM time_value);
SELECT
LOCALTIME,
EXTRACT (HOUR FROM LOCALTIME) as hour,
EXTRACT (MINUTE FROM LOCALTIME) as minute,
EXTRACT (SECOND FROM LOCALTIME) as second,
EXTRACT (milliseconds FROM LOCALTIME) as milliseconds;
-- 시간 값에서 산술 연산
SELECT time '10:00' - time '02:00' AS result;
SELECT LOCALTIME + interval '2 hours' AS result;
반응형
'SW ENGINEERING > Postgres' 카테고리의 다른 글
[PostgreSQL] BASIC - CREATE TABLE (0) | 2021.09.06 |
---|---|
[PostgreSQL] BASIC - Data Types - 2 (0) | 2021.09.06 |
[PostgreSQL] Import CSV File & export CSV File (0) | 2021.09.06 |
[PostgreSQL] BASIC - Transaction (0) | 2021.09.06 |
[PostgreSQL] BASIC - Upsert (0) | 2021.09.06 |
최근댓글