- ์นดํ ๊ณ ๋ฆฌ:
๋ฐ์ ํ ๋ฐ ์ ํ ๋ฐ์ดํฐ ํจ์ (๋ฐฐ์ด/์ค๋ธ์ ํธ)
OBJECT_CONSTRUCT_KEEP_NULLยถ
์ธ์์์ ์์ฑ๋์ด NULL ๊ฐ์ ํฌํจํ๋ ํค-๊ฐ ํ์ด๋ฅผ ์ ์งํ๋ OBJECT ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฐธ๊ณ ํญ๋ชฉ:
๊ตฌ๋ฌธยถ
OBJECT_CONSTRUCT_KEEP_NULL( [<key>, <value> [, <key>, <value> , ...]] )
OBJECT_CONSTRUCT_KEEP_NULL(*)
์ธ์ยถ
key
ํค-๊ฐ ํ์ด์ ํค. ๊ฐ๊ฐ์ ํค๋ VARCHAR ๊ฐ์ ๋๋ค.
value
ํค์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๋๋ค. ์ด ๊ฐ์ ์ด๋ค ๋ฐ์ดํฐ ํ์ ์ด๋ ๋ ์ ์์ต๋๋ค.
*
๋ณํ(์์ผ๋์นด๋)๋ก ํธ์ถํ๋ ๊ฒฝ์ฐ ํน์ฑ ์ด๋ฆ์ ํค๋ก, ์ฐ๊ด๋ ๊ฐ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ์ฌ ์ง์ ๋ ๋ฐ์ดํฐ์์ OBJECT ๊ฐ์ด ์์ฑ๋ฉ๋๋ค. ์๋์ ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
ํจ์์ ์์ผ๋์นด๋๋ฅผ ์ ๋ฌํ ๋ ์์ผ๋์นด๋๋ฅผ ํ ์ด๋ธ์ ์ด๋ฆ์ด๋ ๋ณ์นญ์ผ๋ก ํ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,
mytable
์ด๋ผ๋ ํ ์ด๋ธ์ ๋ชจ๋ ์ด์ ์ ๋ฌํ๋ ค๋ฉด ๋ค์์ ์ง์ ํ์ญ์์ค.(mytable.*)
ํํฐ๋ง์ ์ํด ILIKE ๋ฐ EXCLUDE ํค์๋๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
ILIKE๋ ์ง์ ๋ ํจํด๊ณผ ์ผ์นํ๋ ์ด ์ด๋ฆ์ ํํฐ๋งํฉ๋๋ค. ํจํด์ ํ๋๋ง ํ์ฉ๋ฉ๋๋ค. ์:
(* ILIKE 'col1%')
EXCLUDE๋ ์ง์ ๋ ์ด๊ณผ ์ผ์นํ์ง ์๋ ์ด ์ด๋ฆ์ ๊ฑธ๋ฌ๋ ๋๋ค. ์:
(* EXCLUDE col1) (* EXCLUDE (col1, col2))
์ด๋ฌํ ํค์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ์ ์๊ฐ ์ ํจํฉ๋๋ค. ๋ค์ ์์์๋ ILIKE ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ
mytable
์ ํจํดcol1%
์ ์ผ์นํ๋ ๋ชจ๋ ์ด์ ํํฐ๋งํฉ๋๋ค.(mytable.* ILIKE 'col1%')
ILIKE ๋ฐ EXCLUDE ํค์๋๋ ๋จ์ผ ํจ์ ํธ์ถ์์ ๊ฒฐํฉํ ์ ์์ต๋๋ค.
์ด ํจ์์ ๊ฒฝ์ฐ ILIKE ๋ฐ EXCLUDE ํค์๋๋ SELECT ๋ชฉ๋ก์ด๋ GROUP BY ์ ์์๋ง ์ ํจํฉ๋๋ค.
ILIKE ๋ฐ EXCLUDE ํค์๋์ ๋ํ ์์ธํ ๋ด์ฉ์ SELECT ์ โ๋งค๊ฐ ๋ณ์โ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋ฐํยถ
๋ฐํ๋ ๊ฐ์ ๋ฐ์ดํฐ ํ์ ์ OBJECT ์ ๋๋ค.
์ฌ์ฉ๋ฒ ๋ ธํธยถ
ํค๊ฐ NULL(์ฆ, SQL NULL)์ธ ๊ฒฝ์ฐ, ๊ฒฐ๊ณผ ์ค๋ธ์ ํธ์์ ํค-๊ฐ ํ์ด๊ฐ ์๋ต๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ด NULL์ธ ๊ฒฝ์ฐ, ํค-๊ฐ ํ์ด๊ฐ ์ ์ง๋ฉ๋๋ค.
์์ฑ๋ ์ค๋ธ์ ํธ๋ ํค-๊ฐ ํ์ด์ ์๋ ์์๋ฅผ ๋ฐ๋์ ๋ณด์กดํ์ง๋ ์์ต๋๋ค.
์ยถ
์ด ์๋ OBJECT_CONSTRUCT ๋ฐ OBJECT_CONSTRUCT_KEEP_NULL ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
SELECT OBJECT_CONSTRUCT('key_1', 'one', 'key_2', NULL) AS WITHOUT_KEEP_NULL,
OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', 'key_2', NULL) AS KEEP_NULL_1,
OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', NULL, 'two') AS KEEP_NULL_2;
+-------------------+-------------------+------------------+
| WITHOUT_KEEP_NULL | KEEP_NULL_1 | KEEP_NULL_2 |
|-------------------+-------------------+------------------|
| { | { | { |
| "key_1": "one" | "key_1": "one", | "key_1": "one" |
| } | "key_2": null | } |
| | } | |
+-------------------+-------------------+------------------+
๋ค์ ์๋ OBJECT_CONSTRUCT ๋ฐ OBJECT_CONSTRUCT_KEEP NULL ๊ฐ์ ์ฐจ์ด๋ ๋ณด์ฌ์ฃผ์ง๋ง, ์ด ์๋ ์ฟผ๋ฆฌ ์ ์ ํ์๋๋ ์์ ํ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค.
CREATE TABLE demo_table_1_with_nulls (province VARCHAR, created_date DATE);
INSERT INTO demo_table_1_with_nulls (province, created_date) VALUES
('Manitoba', '2024-01-18'::DATE),
('British Columbia', NULL),
('Alberta', '2024-01-19'::DATE),
(NULL, '2024-01-20'::DATE);
SELECT *
FROM demo_table_1_with_nulls
ORDER BY province;
+------------------+--------------+
| PROVINCE | CREATED_DATE |
|------------------+--------------|
| Alberta | 2024-01-19 |
| British Columbia | NULL |
| Manitoba | 2024-01-18 |
| NULL | 2024-01-20 |
+------------------+--------------+
SELECT OBJECT_CONSTRUCT(*) AS oc,
OBJECT_CONSTRUCT_KEEP_NULL(*) AS oc_keep_null
FROM demo_table_1_with_nulls
ORDER BY oc_keep_null['PROVINCE'];
+----------------------------------+----------------------------------+
| OC | OC_KEEP_NULL |
|----------------------------------+----------------------------------|
| { | { |
| "CREATED_DATE": "2024-01-19", | "CREATED_DATE": "2024-01-19", |
| "PROVINCE": "Alberta" | "PROVINCE": "Alberta" |
| } | } |
| { | { |
| "PROVINCE": "British Columbia" | "CREATED_DATE": null, |
| } | "PROVINCE": "British Columbia" |
| | } |
| { | { |
| "CREATED_DATE": "2024-01-18", | "CREATED_DATE": "2024-01-18", |
| "PROVINCE": "Manitoba" | "PROVINCE": "Manitoba" |
| } | } |
| { | { |
| "CREATED_DATE": "2024-01-20" | "CREATED_DATE": "2024-01-20", |
| } | "PROVINCE": null |
| | } |
+----------------------------------+----------------------------------+
๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ํจ์ OBJECT_CONSTRUCT๋ฅผ ์ฌ์ฉํ๋ ์๋ OBJECT_CONSTRUCT ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.