Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
SYSTIMESTAMP()
RETURNS timestamptz;SELECT SYSTIMESTAMP();
systimestamp
-------------------------------
2025-03-06 23:41:29.160617+09
(1 row)SESSIONTIMEZONE()
RETURNS text;select sessiontimezone();
sessiontimezone
-----------------
Asia/Seoul
(1 row){schema_name}.{function_name}
-- μμ) o2views extension μ€μΉ ν, μλ‘ μΆκ°λ sysdateλΌλ ν¨μ μ¬μ©
-- select oracle.sysdate();
SYSDATE()
RETURN TIMESTAMP;select sysdate();
sysdate
---------------------
2025-03-06 22:39:05
(1 row)-- νμ¬ μ μ μΈμ
μμ μ€ν€λ§ 'oracle'λ₯Ό κ°μ₯ μ°μ μμ λμ search_pathλ‘ μ€μ
set search_path to oracle, public;
{function_name}
-- μμ) o2views extension μ€μΉ ν, μλ‘ μΆκ°λ sysdateλΌλ ν¨μ μ¬μ©
-- select sysdate();LAST_DAY
(
value IN date
)
RETURNS date;
LAST_DAY
(
value IN TIMESTAMP with time zone
)
RETURNS TIMESTAMP without time zone;-- DATE νμ
μμ : '2023-05-15'κ° μν λ¬μ λ§μ§λ§ λ μ§ λ°ν
SELECT LAST_DAY('2023-05-15'::date);
-- κ²°κ³Ό: '2023-05-31' (2023λ
5μμ λ§μ§λ§ λ )
last_day
------------
2023-05-31
(1 row)
-- TIMESTAMPTZ νμ
μμ : '2023-05-15 14:30:00+09'κ° μν λ¬μ λ§μ§λ§ λ μ§ λ°ν
SELECT LAST_DAY('2023-05-15 14:30:00+09'::timestamptz);
-- κ²°κ³Ό: νμμ€ν¬ν κ°μΌλ‘ ν΄λΉ λ¬μ λ§μ§λ§ λ κ³Ό μλ μκ° μ λ³΄κ° κ²°ν©λμ΄ λ°νλ¨
last_day
---------------------
2023-05-31 14:30:00
(1 row)COSH(num)SELECT TANH(0);
tanh
------
0HEXTORAW
(
str IN text
)
RETURNS bytea;SELECT HEXTORAW('DB') AS col;
col
------
\xdb
(1κ° ν)BIN_TO_NUM
(
expr1, expr2, ..., exprn IN numeric -- variadic: treated as numeric[]
)
RETURNS numeric;SELECT BIN_TO_NUM(1,0,1);
bin_to_num
------------
5
(1κ° ν)
SELECT BIN_TO_NUM('1',0,1);
bin_to_num
------------
5
(1κ° ν)
SELECT BIN_TO_NUM('2',0,1);
ERROR: Invalid value in array, only 0 and 1 are allowedCOSH(num)SELECT COSH(0);
cosh
------
1LENGTH(str) SELECT LENGTH('abc'::char(6));
length
--------
6
(1 row)
SELECT LENGTH(''::char(6));
length
--------
6
(1 row)TO_YMINTERVAL
(
sql_format IN text -- format: '[+|-]years-months'
)
RETURNS interval;
TO_YMINTERVAL
(
ym_iso_format IN text -- format: '[-]P[<years>Y][<months>M]'
)
RETURNS interval;SELECT DATE '2008-03-20' + TO_YMINTERVAL('2-7') AFTER;
after
------------------------
2010-10-20 09:00:00+09
(1κ° ν)
SELECT DATE '2008-03-20' + TO_YMINTERVAL('P2Y7M') AFTER;
after
------------------------
2010-10-20 09:00:00+09
(1κ° ν)MONTHS_BETWEEN
(
date1 IN date,
date2 IN date
)
RETURNS numeric;
MONTHS_BETWEEN
(
timestamptz1 IN timestamptz,
timestamptz2 IN timestamptz
)
RETURNS numeric;# ν
μ€νΈ 1
SELECT MONTHS_BETWEEN('2023-05-15'::date, '2022-01-10'::date);
months_between
------------------
16.1612903225806
(1 row)
# ν
μ€νΈ 2
SELECT MONTHS_BETWEEN('2023-05-15 12:00:00+09'::timestamptz, '2022-01-10 08:30:00+09'::timestamptz);
months_between
------------------
16.1659946143627LNNVL
(
value IN boolean
)
RETURNS boolean;# ν
μ€νΈ 1
SELECT LNNVL(true);
lnnvl
-------
f
(1 row)
# ν
μ€νΈ 2
SELECT LNNVL(false);
lnnvl
-------
t
(1 row)
# ν
μ€νΈ 3
SELECT LNNVL(NULL);
lnnvl
-------
t
(1 row)NANVL
(
value IN { real, double precision, numeric },
replacement IN { varchar, real, double precision, numeric }
)
RETURNS { real, double precision, numeric };# ν
μ€νΈ 1
SELECT NANVL(3.14, 0.0); -- κ²°κ³Ό: 3.14 (3.14κ° NaNμ΄ μλλ―λ‘ μλ κ° λ°ν)
nanvl
-------
3.14
(1 row)
# ν
μ€νΈ 2
SELECT NANVL('NaN'::float4, 0.0); -- κ²°κ³Ό: 0.0 (첫 λ²μ§Έ κ°μ΄ NaNμ΄μ΄μ λμ²΄κ° 0.0 λ°ν)
nanvl
-------
0
(1 row)NUMTOYMINTERVAL
(
expr IN numeric,
interval_unit IN text
)
RETURNS interval;SELECT NUMTOYMINTERVAL (10, 'YEAR');
numtoyminterval
-----------------
10 years
(1κ° ν)
SELECT NUMTOYMINTERVAL (10, 'month');
numtoyminterval
-----------------
10 mons
(1κ° ν)
SELECT NUMTOYMINTERVAL (0, 'month');
numtoyminterval
-----------------
00:00:00
(1κ° ν)TO_DSINTERVAL
(
sql_format IN text -- format: '[+|-]days hours:minutes:seconds[.frac_secs]'
)
RETURNS interval;
TO_DSINTERVAL
(
ds_iso_format In text -- format: '[-]P[<days>D][T[<hours>H][<minutes>M][<seconds>[.frac_secs]S]]'
)
RETURNS interval;ν¨ν€μ§(Package) μ°Έμ‘° μλ΄μμ λλ€.
λ³Έ μλ΄μλ OpenSQLμ μ¬μ©νλ μ¬μ©μλ₯Ό λμμΌλ‘ κΈ°μ ν©λλ€.
SELECT DATE '2008-03-20' - TO_DSINTERVAL('50 00:00:00') before;
before
------------------------
2008-01-30 09:00:00+09
(1κ° ν)
SELECT DATE '2008-03-20' - TO_DSINTERVAL('P50DT0H0M0S') before;
before
------------------------
2008-01-30 09:00:00+09
(1κ° ν)# ν
μ€νΈ 1
SELECT GREATEST(5, 3, 9);
greatest
----------
9
(1 row)
# ν
μ€νΈ 2
SELECT GREATEST('apple'::text, 'banana', 'cherry'); -- κ²°κ³Ό: cherry (λ¬Έμμ΄ μ¬μ μ λΉκ΅)
greatest
----------
cherry
(1 row)
# ν
μ€νΈ 3
SELECT GREATEST(10, NULL, 7); -- κ²°κ³Ό NULL
greatest
----------
# ν
μ€νΈ 1
SELECT LEAST(5, 3, 9);
least
-------
3
(1 row)
# ν
μ€νΈ 2
SELECT LEAST('apple'::text, 'banana', 'cherry'); -- κ²°κ³Ό: apple (λ¬Έμμ΄ μ¬μ μ λΉκ΅)
least
-------
apple
(1 row)
# ν
μ€νΈ 3
SELECT LEAST(10, NULL, 7); -- κ²°κ³Ό: NULL
least
-------
(1 row)# ν
μ€νΈ 1
SELECT SYS_EXTRACT_UTC('2023-06-01 12:34:56+07'::timestamptz);
sys_extract_utc
---------------------
2023-06-01 05:34:56
(1 row)
# ν
μ€νΈ 2
-- μΈμ
μκ°λ '+9:00' κΈ°μ€μΌλ‘ timestamptz λ³ν ν UTCλ‘ λ³κ²½
SELECT SYS_EXTRACT_UTC('2023-06-01 12:34:56'::timestamp);
sys_extract_utc
---------------------
2023-06-01 03:34:56
(1 row)SELECT INSTR('ABCDEABCDEABCDE', 'CD');
instr
-------
3SELECT LTRIM('ABCDEFGHIJKLMNOP', 'ABCDEF');
ltrim
------------
GHIJKLMNOP
(1 row)SELECT MOD(-11, 4), MOD(11, -4);
mod | mod
-----+-----
-3 | 3SELECT REGEXP_LIKE('Hello World', 'world', 'i');
regexp_like
-------------
t
(1 row) SELECT LPAD('LPAD', 10, '-=');
lpad
------------
-=-=-=LPAD
(1 row)SELECT TO_TIMESTAMP_TZ('2023-06-01 12:34:56+09', 'YYYY-MM-DD HH24:MI:SSOF');
to_timestamp_tz
------------------------
2023-06-01 12:34:56+09
(1 row)SELECT SINH(0);
sinh
------
0SELECT BITAND(6,3);
bitand
--------
2SELECT NAME FROM T ORDER BY NLSSORT(NAME);
name
------
BAR
FOO
(2 rows)SELECT TO_SINGLE_BYTE('οΌ¨ο½
ο½ο½ο½, ο½ο½ο½ο½ο½!');
-- μμ κ²°κ³Ό: 'Hello, world!'
to_single_byte
----------------
Hello, world!
(1 row)ASCIISTR
(
str IN text
)
RETURNS text;SELECT ASCIISTR('AνκΈB');
asciistr
--------------
A\D55C\AE00B
(1κ° ν)RAWTOHEX
(
raw IN { bytea | text }
)
RETURNS text;SELECT RAWTOHEX('AB');
rawtohex
----------
4142
(1κ° ν)ROUND
(
expr IN date [, fmt IN text]
)
RETURN date;
ROUND
(
expr IN timestamp without time zone [, fmt IN text]
)
RETURN timestamp without time zone;
ROUND
(
expr IN timestamp with time zone [, fmt IN text]
)
RETURN timestamp with time zone;# ν
μ€νΈ 1
-- λ μ§ λ°μ¬λ¦Ό μμ : '2023-05-15' λ μ§λ₯Ό μ λ¨μλ‘ λ°μ¬λ¦Ό
SELECT ROUND('2023-05-15'::date, 'MONTH');
-- κ²°κ³Ό: ν΄λΉ μμ μμμΌ λλ μμ νΉμ κΈ°μ€μΌλ‘ μ‘°μ λ λ μ§ λ°ν
round
------------
2023-05-01
(1 row)
# ν
μ€νΈ 2
-- λ μ§ λ°μ¬λ¦Ό μμ (ν¬λ§· λ―Έμ§μ ): κΈ°λ³Έ ν¬λ§·('DDD')μΌλ‘ λ°μ¬λ¦Ό
SELECT ROUND('2023-05-15'::date);
-- κ²°κ³Ό: '2023-05-15' λ μ§κ° ν¬λ§· λͺ¨λΈμ λ°λΌ λ°μ¬λ¦Όλ κ²°κ³Ό λ°ν
round
------------
2023-05-15
(1 row)
# ν
μ€νΈ 3
-- νμμ€ν¬ν λ°μ¬λ¦Ό μμ : '2023-05-15 14:35:20' νμμ€ν¬νλ₯Ό μκ° λ¨μλ‘ λ°μ¬λ¦Ό
SELECT ROUND('2023-05-15 14:35:20'::timestamp, 'HH24');
-- κ²°κ³Ό: '2023-05-15 15:00:00' (λΆκ³Ό μ΄κ° 0μΌλ‘ μ‘°μ λ¨)
round
---------------------
2023-05-15 15:00:00
(1 row)
# ν
μ€νΈ 4
-- νμμ€ν¬ν with time zone λ°μ¬λ¦Ό μμ : κΈ°λ³Έ ν¬λ§·('DDD')μΌλ‘ λ°μ¬λ¦Ό
SELECT ROUND('2023-05-15 14:35:20+09'::timestamptz);
-- κ²°κ³Ό: ν¬λ§· λͺ¨λΈμ λ°λΌ λ°μ¬λ¦Όλ νμμ€ν¬ν λ°ν
round
------------------------
2023-05-16 00:00:00+09
(1 row)NVL(expr1, expr2)# ν
μ€νΈ λ°μ΄ν°
create table employees (first_name varchar, last_name varchar, salary integer, hire_date timestamptz);
INSERT INTO employees (first_name, last_name, salary, hire_date) VALUES
('John', 'Doe', NULL, '2020-03-15 09:00:00'),
(NULL, 'Smith', 62000, '2019-07-22 10:30:00'),
('Michael', 'Johnson', 72000, '2018-11-10 08:45:00'),
('Emily', 'Davis', 48000, '2021-05-01 12:00:00'),
('David', 'Wilson', 53000, '2017-09-17 14:20:00'),
(NULL, 'Brown', NULL, '2016-12-05 09:15:00'),
('James', 'Taylor', NULL, '2015-06-30 16:45:00'),
('Jessica', 'Martinez', 68000, '2022-01-25 11:10:00'),
(NULL, 'Anderson', 58000, '2020-10-05 13:35:00'),
('Laura', 'Thomas', 49500, '2023-08-12 08:00:00');
# ν
μ€νΈ 1
# salary κ°μ΄ NULLμ΄λ©΄ 0 λ°ν; first_name κ°μ΄ NULLμ΄λ©΄ last_name λ°ν;
select NVL(salary,0), NVL(first_name, last_name) from employees ;
nvl | nvl
-------+---------
55000 | John
62000 | Jane
72000 | Michael
48000 | Emily
53000 | David
60000 | Sarah
75000 | James
68000 | Jessica
58000 | Daniel
49500 | Laura
(10 rows)
WM_CONCAT
(
expr IN text
)
RETURNS text;# ν
μ€νΈ ν
μ΄λΈ
create table employees ( first_name varchar, last_name varchar );
INSERT INTO employees (first_name, last_name) VALUES
('John', 'Doe'),
('Jane', 'Smith'),
('Michael', 'Johnson'),
('Emily', 'Davis'),
('David', 'Wilson'),
('Sarah', 'Brown'),
('James', 'Taylor'),
('Jessica', 'Martinez'),
('Daniel', 'Anderson'),
('Laura', 'Thomas');
# ν
μ€νΈ 1
select wm_concat(last_name) from employees ;
wm_concat
----------------------------------------------------------------------
Doe,Smith,Johnson,Davis,Wilson,Brown,Taylor,Martinez,Anderson,Thomas
(1 row)
# ν
μ€νΈ 2
select wm_concat(first_name) from employees ;
wm_concat
----------------------------------------------------------------
John,Jane,Michael,Emily,David,Sarah,James,Jessica,Daniel,Laura
(1 row)LISTAGG(
[ ALL | DISTINCT ]
expression
[, delimite]
)
[OVER ( [query_partition_clause] );
RETURNS text;
query_partition_caluse :
PARTITION BY
{ expr[, expr ]...
| ( expr[, expr ]... )
}# ν
μ€νΈ ν
μ΄λΈ
create table employees ( first_name varchar, last_name varchar );
INSERT INTO employees (first_name, last_name) VALUES
('John', 'Doe'),
('Jane', 'Smith'),
('Michael', 'Johnson'),
('Emily', 'Davis'),
('David', 'Wilson'),
('Sarah', 'Brown'),
('James', 'Taylor'),
('Jessica', 'Martinez'),
('Daniel', 'Anderson'),
('Laura', 'Thomas');
# ν
μ€νΈ 1
select listagg(last_name, ',') from employees ;
listagg
----------------------------------------------------------------------
Doe,Smith,Johnson,Davis,Wilson,Brown,Taylor,Martinez,Anderson,Thomas
(1 row)
# ν
μ€νΈ 2
select listagg(last_name) from employees ;
listagg
-------------------------------------------------------------
DoeSmithJohnsonDavisWilsonBrownTaylorMartinezAndersonThomas
(1 row)NUMTODSINTERVAL
(
number IN double precision,
unit IN text
)
RETURNS interval;-- 1.5 DAYλ 1μΌ 12μκ°μΌλ‘ λ³νλ¨
SELECT NUMTODSINTERVAL(1.5, 'DAY');
numtodsinterval
-----------------
1 day 12:00:00
(1 row)
-- 2.75 HOURλ 2μκ° 45λΆμΌλ‘ λ³νλ¨
SELECT NUMTODSINTERVAL(2.75, 'HOUR');
numtodsinterval
-----------------
02:45:00
(1 row)
-- 30 MINUTEλ 30λΆ 0μ΄λ‘ λ³νλ¨
SELECT NUMTODSINTERVAL(30, 'MINUTE');
numtodsinterval
-----------------
00:30:00
(1 row)
-- 90 SECONDλ 90μ΄ κ·Έλλ‘ λ°νλ¨
SELECT NUMTODSINTERVAL(90, 'SECOND');
numtodsinterval
-----------------
00:01:30
(1 row)REMAINDER(num1, num2);SELECT REMAINDER(3,2);
remainder
-----------
-1RPAD(expr1, num [, expr2]) SELECT RPAD('RPAD', 10, '-=');
rpad
------------
RPAD-=-=-=
(1 row)SUBSTR(str, position [, length])SELECT SUBSTR('ABCDEFG', 3, 2), SUBSTR('ABCDEFG', -3, 2);
substr | substr
--------+--------
CD | EFDUMP(expr[, return_fmt [, start_position [, length ] ] ])SELECT DUMP('abc'::TEXT, 1016);
dump
------------------------------------------
Typ=25 Len=3 CharacterSet=UTF8: 61,62,63
(1 row)EXISTSNODE
(
xml IN xml,
xpath_str IN text,
namespace_str IN text DEFAULT NULL
)
RETURNS integer;select existsnode('<root><a>1</a><b>2</b></root>'::xml, '/root/a');
existsnode
------------
1
(1κ° ν)
select existsnode('<root><a>1</a><b>2</b></root>'::xml, null);
existsnode
------------
(1κ° ν)RTRIM(str [, char_set])SELECT RTRIM('ABCDEFGHIJKLMNOP', 'LMNOP');
rtrim
-------------
ABCDEFGHIJK
(1 row)REGEXP_LIKE(str, pattern [, replace_str [, position [, occurrence [, match_param]]]])SELECT REGEXP_REPLACE('aaaaaaa','([[:alpha:]])', 'x');
regexp_replace
----------------
xxxxxxx
(1 row)REGEXP_SUBSTR(str, pattern [, position [, occurrence [, match_param [, subexp]]]])SELECT REGEXP_COUNT('abcabcabc','abc', 2);
regexp_count
--------------
2
(1 row)REGEXP_COUNT(str, pattern [, position [, match_param]])SELECT REGEXP_COUNT('abcabcabc','abc', 2);
regexp_count
--------------
2
(1 row)λ°μ΄ν° νμ μ λν μ°Έμ‘° μλ΄μμ λλ€.
{schema_name}.{type_name}
-- μμ) o2types extension μ€μΉ ν, μλ‘ μΆκ°λ dateλΌλ νμ
μ μ¬μ©ν©λλ€.
-- create table T (col1 oracle.date);
-- νμ¬ μ μ μΈμ
μμ μ€λ―ΈμΉ΄ 'oracle'λ₯Ό κ°μ₯ μ°μ μμ λμ search_pathλ‘ μ€μ ν©λλ€.
set search_path to oracle, public;
{type_name}
-- μμ) o2types extension μ€μΉ ν, μλ‘ μΆκ°λ dateλΌλ νμ
μ μ¬μ©ν©λλ€.
-- create table T (col1 date);DATENEXT_DAY
(
value IN date,
weekday IN text
)
RETURNS date;
NEXT_DAY
(
value IN date,
weekday_index IN integer
)
RETURNS date;
NEXT_DAY
(
value IN TIMESTAMP WITH TIME ZONE,
weekday IN text
)
RETURNS TIMESTAMP without time zone;
NEXT_DAY
(
value IN TIMESTAMP WITH TIME ZONE,
weekday_index IN integer
)
RETURNS TIMESTAMP without time zone;n : μ (.)μ΄ μ€λ°κΏ λ¬Έμλ ν¬ν¨ν©λλ€.n : μ (.)μ΄ μ€λ°κΏ λ¬Έμλ ν¬ν¨ν©λλ€.n : μ (.)μ΄ μ€λ°κΏ λ¬Έμλ ν¬ν¨ν©λλ€.||λ₯Ό μ 곡ν©λλ€.CREATE TABLE T (a date);
INSERT INTO T VALUES ('4713-01-01 01:11:30 BC');
INSERT INTO T VALUES ('2023-03-19 13:29:30');VARCHAR2[(size)]EMP_NAME VARCHAR2(10)NVARCHAR(size)clobSELECT 'Hello, '::clob || 'World!'::clob;blobINSERT INTO files (data) VALUES (E'\\xDEADBEEF'::blob);# ν
μ€νΈ 1
-- λ μ§ μ μ: '2023-05-15'λ₯Ό μ λ¨μλ‘ μ μνμ¬, ν΄λΉ μμ 첫 λ μ λ°νν¨
SELECT TRUNC('2023-05-15'::date, 'MONTH');
-- κ²°κ³Ό: '2023-05-01'
trunc
------------
2023-05-01
(1 row)
# ν
μ€νΈ 2
-- λ μ§ μ μ: ν¬λ§· λ―Έμ§μ μ, μλ λ μ§κ° κ·Έλλ‘ λ°νλ¨
SELECT TRUNC('2023-05-15'::date);
-- κ²°κ³Ό: '2023-05-15'
trunc
------------
2023-05-15\q
(1 row)
# ν
μ€νΈ 3
-- νμμ€ν¬ν μ μ: '2023-05-15 14:35:20'λ₯Ό μκ° λ¨μλ‘ μ μνμ¬, λΆκ³Ό μ΄λ₯Ό μ κ±°ν¨
SELECT TRUNC('2023-05-15 14:35:20'::timestamp, 'HH24');
-- κ²°κ³Ό: '2023-05-15 14:00:00'
trunc
---------------------
2023-05-15 14:00:00
(1 row)
# ν
μ€νΈ 4
-- timestamptz μ μ: '2023-05-15 14:35:20+09'μ κ²½μ°, ν¬λ§· λ―Έμ§μ μ κΈ°λ³Έ ν¬λ§·('DDD')μΌλ‘ μ μλ¨
SELECT TRUNC('2023-05-15 14:35:20+09'::timestamptz);
-- κ²°κ³Ό: νμμ€ν¬ν κ°μ΄ μ μλ κ²°κ³Ό λ°ν (μΌ λ¨μλ‘ μ μ)
trunc
------------------------
2023-05-15 00:00:00+09
(1 row)-- λ¬Έμν μμΌ μμ : '2023-05-15' μ΄νμ 첫 λ²μ§Έ Monday λ°ν
SELECT NEXT_DAY('2023-05-15'::date, 'Monday');
next_day
------------
2023-05-22
(1 row)
-- μΈλ±μ€ κΈ°λ° μμΌ μμ : '2023-05-15' μ΄νμ 첫 λ²μ§Έ μμμΌ(μΈλ±μ€ 2) λ°ν
SELECT NEXT_DAY('2023-05-15'::date, 2);
next_day
------------
2023-05-22
(1 row)
-- TIMESTAMP WITH TIME ZONE μμ (λ¬Έμν):
SELECT NEXT_DAY('2023-05-15 14:30:00+09'::timestamptz, 'Friday');
next_day
---------------------
2023-05-19 14:30:00
(1 row)
-- TIMESTAMP WITH TIME ZONE μμ (μΈλ±μ€):
SELECT NEXT_DAY('2023-05-15 14:30:00+09'::timestamptz, 6);
next_day
---------------------
2023-05-19 14:30:00
(1 row)# ν
μ€νΈ λ°μ΄ν°
create table employees (
first_name varchar,
last_name varchar,
salary integer,
hire_date timestamptz,
commission_pct integer,
bonus integer,
status varchar
);
INSERT INTO employees (first_name, last_name, salary, hire_date, commission_pct, bonus, status) VALUES
('John', 'Doe', 55000, '2020-03-15 09:00:00', NULL, 2000, 'Active'),
('Jane', 'Smith', 62000, '2019-07-22 10:30:00', 10, 3000, 'Active'),
('Michael', 'Johnson', 72000, '2018-11-10 08:45:00', 7, 2500, 'Inactive'),
('Emily', 'Davis', 48000, '2021-05-01 12:00:00', NULL, 1500, NULL),
('David', 'Wilson', 53000, '2017-09-17 14:20:00', 8, 2200, NULL),
('Sarah', 'Brown', 60000, '2016-12-05 09:15:00', 12, 2800, 'Active'),
('James', 'Taylor', 75000, '2015-06-30 16:45:00', NULL, 2600, 'Resigned'),
('Jessica', 'Martinez', 68000, '2022-01-25 11:10:00', 5, 1800, NULL),
('Daniel', 'Anderson', 58000, '2020-10-05 13:35:00', 6, 2000, 'Active'),
('Laura', 'Thomas', 49500, '2023-08-12 08:00:00', 4, 1200, 'Probation');
# ν
μ€νΈ 1
-- commission_pct κ°μ΄ NULLμ΄ μλλ©΄ bonus κ°μ, NULLμ΄λ©΄ 0μ λ°νν¨
SELECT NVL2(commission_pct, bonus, 0)
FROM employees;
nvl2
------
0
3000
2500
0
2200
2800
0
1800
2000
1200
(10 rows)
# ν
μ€νΈ 2
-- 첫 λ²μ§Έ μΈμκ° NULLμ΄ μλλ©΄ λ λ²μ§Έ μΈμ(μ: 'Active')λ₯Ό, NULLμ΄λ©΄ μΈ λ²μ§Έ μΈμ(μ: 'Inactive')λ₯Ό λ°νν¨
SELECT NVL2(status, 'Active', 'Inactive')
FROM employees;
nvl2
----------
Active
Active
Active
Inactive
Inactive
Active
Active
Inactive
Active
Active
(10 rows)-- 4μ리 16μ§μ Unicode escapeλ₯Ό μ¬μ©ν μμ (μ: \0041λ 'A'λ‘ λ³ν)
SELECT UNISTR('\0041\0042\0043');
-- κ²°κ³Ό: 'ABC'
unistr
--------
ABC
(1 row)
-- λ€μν νμμ escape μνμ€λ₯Ό ν¬ν¨ν μμ
SELECT UNISTR('\u0041 \+00420042 \U00000041');
unistr
----------
A δ42 A
(1 row)
select unistr('\0441\043B\043E\043D');
unistr
--------
ΡΠ»ΠΎΠ½
(1 row)
select unistr('d\u0061t\U00000061');
unistr
--------
data
(1 row)
-- μλͺ»λ νμ μμ
SELECT unistr('wrong: \db99');
ERROR: invalid Unicode surrogate pair
SELECT unistr('wrong: \db99\0061');
ERROR: invalid Unicode surrogate pair
SELECT unistr('wrong: \+00db99\+000061');
ERROR: invalid Unicode surrogate pair
SELECT unistr('wrong: \+2FFFFF');
ERROR: invalid Unicode escape value
SELECT unistr('wrong: \udb99\u0061');
ERROR: invalid Unicode surrogate pair
SELECT unistr('wrong: \U0000db99\U00000061');
ERROR: invalid Unicode surrogate pair
SELECT unistr('wrong: \U002FFFFF');
ERROR: invalid Unicode escape value
SELECT unistr('wrong: \0000');
ERROR: invalid Unicode code point
SELECT unistr('wrong: \u0000');
ERROR: invalid Unicode code point
SELECT unistr('wrong: \+000000');
ERROR: invalid Unicode code point
SELECT unistr('wrong: \U00000000');
ERROR: invalid Unicode code point-- ν
μ€νΈμ ν¬λ§· λͺ¨λΈμ μ¬μ©νμ¬ λ μ§/μκ° λ¬Έμμ΄μ TIMESTAMPλ‘ λ³ν
SELECT TO_DATE('2023-06-01 12:34:56', 'YYYY-MM-DD HH24:MI:SS');
to_date
---------------------
2023-06-01 12:34:56
(1 row)
-- ν
μ€νΈλ§ μ λ¬ν κ²½μ° κΈ°λ³Έ λ³ν νμμ μ¬μ© (λΉ λ¬Έμμ΄μ NULL λ°ν)
SELECT TO_DATE('2023-06-01 12:34:56');
to_date
---------------------
2023-06-01 12:34:56
(1 row)
-- μ μν κ°μ λ¬Έμμ΄λ‘ ν΄μνμ¬ TIMESTAMPλ‘ λ³ν
SELECT TO_DATE(20230601, 'YYYYMMDD');
to_date
---------------------
2023-06-01 00:00:00
(1 row)SELECT REGEXP_INSTR('abcabcabc','abc', 2);
regexp_instr
--------------
4
(1 row)RAWTOHEX
(
raw IN { bytea | text }
)
RETURNS text;SELECT RAWTONHEX('AB');
rawtohex
----------
4142
(1κ° ν)SYS_GUID()SELECT SYS_GUID();
sys_guid
------------------------------------
\xc3a83bc2e6f845c8bdf884af0c0516ac
(1 row)MEDIAN
(
expression IN { smallint, int, bigint,
real, double precision,
timestamp, timestamptz, time, timetz, date }
)
RETURNS median;# ν
μ€νΈ ν
μ΄λΈ
create table employees (name varchar, salary integer, hire_date timestamptz);
INSERT INTO employees (name, salary, hire_date) VALUES
('John Doe', 55000, '2020-03-15 09:00:00'),
('Jane Smith', 62000, '2019-07-22 10:30:00'),
('Michael Johnson', 72000, '2018-11-10 08:45:00'),
('Emily Davis', 48000, '2021-05-01 12:00:00'),
('David Wilson', 53000, '2017-09-17 14:20:00'),
('Sarah Brown', 60000, '2016-12-05 09:15:00'),
('James Taylor', 75000, '2015-06-30 16:45:00'),
('Jessica Martinez', 68000, '2022-01-25 11:10:00'),
('Daniel Anderson', 58000, '2020-10-05 13:35:00'),
('Laura Thomas', 49500, '2023-08-12 08:00:00');
-- μ μν λ°μ΄ν°μ μ€μκ° κ³μ° μμ
SELECT MEDIAN(salary) FROM employees;
median
--------
59000
(1 row)
-- λ μ§ν λ°μ΄ν°μ μ€μκ° κ³μ° μμ
SELECT MEDIAN(hire_date) FROM employees;
median
------------------------
2019-11-17 21:45:00+09TO_CHAR
(
value IN { smallint | int | bigint | real | double precision | numeric | text | timestamp | timestamptz }
[, fmt IN text]
)
RETURNS text-- μ«μν κ° λ³ν (ν¬λ§· μμ΄)
SELECT TO_CHAR(12345);
to_char
---------
12345
(1 row)
-- μ«μν κ° λ³ν (ν¬λ§· μ μ©)
SELECT TO_CHAR(12345, 'FM0000000');
to_char
---------
0012345
(1 row)
-- λ μ§ν κ° λ³ν (κΈ°λ³Έ νμ)
SELECT TO_CHAR(SYSDATE());
to_char
---------------------
2025-03-07 00:57:44
(1 row)
-- λ μ§ν κ° λ³ν (ν¬λ§· μ μ©)
SELECT TO_CHAR(SYSDATE(), 'DD-MM-YYYY SS:MI:HH24');
to_char
---------------------
07-03-2025 46:58:00
(1 row)
-- νμμ€ν¬ν λ³ν (timestamptz)
SELECT TO_CHAR(SYSTIMESTAMP(), 'YYYY-MM-DD"T"HH24:MI:SS');
to_char
---------------------
2025-03-06T15:59:30
(1 row)select sys_context('userenv', 'current_schema');
sys_context
-------------
public
select sys_context('userenv', 'host');
sys_context
-------------
[local]
select sys_context('userenv', 'current_user');
sys_context
-------------
opensql
select sys_context('userenv', 'session_user');
sys_context
-------------
opensql
select sys_context('userenv', 'server_host');
sys_context
-------------
tmaxtibero
select sys_context('userenv', 'ip_address');
sys_context
-------------
select oracle.sys_context('userenv', 'hostname');
ERROR: Not supported parameter: hostnameDBTIMEZONE()
RETURNS text;select dbtimezone();
dbtimezone
------------
Asia/Seoul
(1 row)TO_MULTI_BYTE
(
str IN text
)
RETURNS text;SELECT TO_MULTI_BYTE('Hello, World!');
to_multi_byte
----------------------------
οΌ¨ο½
ο½ο½ο½οΌγοΌ·ο½ο½ο½ο½οΌ
(1 row)ls -rlta
total 60
drwxr-xr-x 2 root root 4096 Mar 13 05:09 utl_file
drwxr-xr-x 2 root root 4096 Mar 13 05:09 o2views
drwxr-xr-x 2 root root 4096 Mar 13 05:09 o2types
drwxr-xr-x 2 root root 4096 Mar 13 05:09 o2functions
-rw-r--r-- 1 root root 3266 Mar 13 05:09 install.sh # sh μ€μΉμ© μ€ν¬λ¦½νΈ
drwxr-xr-x 2 root root 4096 Mar 13 05:09 dbms_sql
drwxr-xr-x 2 root root 4096 Mar 13 05:09 dbms_random
drwxr-xr-x 2 root root 4096 Mar 13 05:09 dbms_pipe
drwxr-xr-x 2 root root 4096 Mar 13 05:09 dbms_output
drwxr-xr-x 2 root root 4096 Mar 13 05:09 dbms_alert
-rw-r--r-- 1 root root 1465 Mar 13 05:09 VERSION.json # o2 extensions λ²μ μ 보
-rw-r--r-- 1 root root 672 Mar 13 05:09 Makefile # make λ°©μμ€μΉμ© νμΌ
drwxr-xr-x 12 root root 4096 Mar 13 05:09 .
drwxr-xr-x 6 root root 4096 Mar 13 05:09 ..cd o2
make all # o2 extensions μ 체 μ€μΉ
# μλλ μ 체 μ€μΉ κ³Όμ μμ μΆλ ₯λλ μμ λ‘κ·Έ
make[1]: Entering directory '/home/opensql/o2/build/o2-dist-1.0.1/o2functions'
/usr/bin/mkdir -p '/home/opensql/postgres/build/16/lib'
/usr/bin/mkdir -p '/home/opensql/postgres/build/16/share/extension'
/usr/bin/mkdir -p '/home/opensql/postgres/build/16/share/extension'
/usr/bin/install -c -m 755 o2functions.so '/home/opensql/postgres/build/16/lib/o2functions.so'
/usr/bin/install -c -m 644 .//o2functions.control '/home/opensql/postgres/build/16/share/extension/'
/usr/bin/install -c -m 644 .//VERSION.json .//o2functions--1.0.sql '/home/opensql/postgres/build/16/share/extension/'
make[1]: Leaving directory '/home/opensql/o2/build/o2-dist-1.0.1/o2functions'
...cd o2
# make [ extension1 extension2 ... ]
make o2functions o2types dbms_output
# μλλ make μν μ λμ€λ μμ λ‘κ·Έ
make -C o2functions install
make[1]: Entering directory '/home/opensql/o2/build/o2-dist-1.0.1/o2functions'
/usr/bin/mkdir -p '/home/opensql/postgres/build/16/lib'
/usr/bin/mkdir -p '/home/opensql/postgres/build/16/share/extension'
/usr/bin/mkdir -p '/home/opensql/postgres/build/16/share/extension'
/usr/bin/install -c -m 755 o2functions.so '/home/opensql/postgres/build/16/lib/o2functions.so'
/usr/bin/install -c -m 644 .//o2functions.control '/home/opensql/postgres/build/16/share/extension/'
/usr/bin/install -c -m 644 .//VERSION.json .//o2functions--1.0.sql '/home/opensql/postgres/build/16/share/extension/'
make[1]: Leaving directory '/home/opensql/o2/build/o2-dist-1.0.1/o2functions'
...cd scripts
sh ./install.sh o2# sh install.sh [ extension1 extension2 ... ]
sh install.sh o2functions o2types dbms_output
# μλλ κ°λ³ μ€μΉ κ³Όμ μμ μΆλ ₯λλ μμλ‘κ·Έ
Installing extensions to:
Library directory: /home/opensql/postgres/build/16/lib
Shared extension directory: /home/opensql/postgres/build/16/share/extension
Extensions to install: o2functions o2types dbms_output
Installing extension: o2functions
Copied control file: ./o2functions.control
Copied SQL file: ./o2functions--1.0.sql
Copied shared library: ./extensions/functions/o2functions.so
Installing extension: o2types
Copied control file: ./o2types.control
Copied SQL file: ./o2types--1.0.sql
Copied shared library: ./extensions/types/o2types.so
Installing extension: dbms_output
Copied control file: ./dbms_output.control
Copied SQL file: ./dbms_output--1.0.sql
Copied shared library: ./extensions/dbms_output/dbms_output.so
Copied METADATA: VERSION.json
Installation completed.[root@20fec5585ddd /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/pgsql-16/bin/
# νμ¬ μ μν κ³μ μ $PATHμ κ²½λ‘κ°μ΄ μλ€λ©΄ PG λ²μ μ μλ§μ κ²½λ‘λ₯Ό $PATH κ²½λ‘μ μΆκ°
[root@20fec5585ddd /]# echo "export PATH=$PATH:/usr/pgsql-16/bin/" >> ~/.bashrc
[root@20fec5585ddd /]# source ~/.bashrcsudo -u {PGκ²½λ‘κ° $PATHμ μ€μ λ λ€λ₯Έ USER} bash -l -c "{make λλ shell μ€μΉ λͺ
λ Ή}"
# μμ)
# postgres μ μ μ $PATHμ /usr/pgsql-16/bin/ κ²½λ‘κ° λ±λ‘λμ΄ μκ³ ,
# opensqlμ΄λΌλ μ μ λ‘ μ μνμ¬ make λ°©μμΌλ‘ o2 μ€μΉνλ €λ κ²½μ°
[opensql@20fec5585ddd /]# sudo -u postgres bash -l -c "make all"# postgresql.confμ shared_preload_librariesμ 첫 λ²μ§Έλ‘ opensql_license μΆκ°
shared_preload_libraries = 'opensql_license'
# λΌμ΄μ μ€ νμΌ κ²½λ‘ νκ²½λ³μ μ€μ
export OPENSQL_LICENSE_PATH="/path/to/license.xml"CREATE EXTENSION {extension name};ALTER EXTENSION {extension name} UPDATE TO {new version};DBMS_OUTPUT.DISABLE();CALL DBMS_OUTPUT.DISABLE();DBMS_OUTPUT.ENABLE
(
buffer_size IN INTEGER DEFAULT 20000
);CALL DBMS_OUTPUT.ENABLE(32768);DBMS_OUTPUT.GET_LINE
(
line OUT TEXT,
status OUT INTEGER
);DBMS_OUTPUT.GET_LINES
(
lines OUT TEXT[],
numlines IN OUT INTEGER
);DO $$
DECLARE
buff TEXT;
stts INTEGER;
BEGIN
CALL DBMS_OUTPUT.PUT_LINE ('ORAFCE TEST 1');
CALL DBMS_OUTPUT.GET_LINE(buff, stts);
END;
$$;DO $$
DECLARE
buff_arr TEXT[];
stts INTEGER := 10;
BEGIN
CALL DBMS_OUTPUT.PUT_LINE ('ORAFCE TEST 1');
CALL DBMS_OUTPUT.PUT_LINE ('ORAFCE TEST 2');
CALL DBMS_OUTPUT.PUT_LINE ('ORAFCE TEST 3');
CALL DBMS_OUTPUT.GET_LINES(buff_arr, stts);
END;
$$;DBMS_OUTPUT.NEW_LINE();CALL DBMS_OUTPUT.NEW_LINE();DBMS_OUTPUT.PUT
(
data IN NUMERIC
);DBMS_OUTPUT.PUT
(
data IN TEXT
);DBMS_OUTPUT.PUT_LINE
(
data IN NUMERIC
);DBMS_OUTPUT.PUT_LINE
(
data IN TEXT
);CALL DBMS_OUTPUT.PUT('PUT_EXAMPLE');
CALL DBMS_OUTPUT.PUT_LINE('TIBERO');-- ν
μ€νΈλ₯Ό numericλ‘ λ³ν (κΈ°λ³Έ λ³ν)
SELECT TO_NUMBER('12345.67');
to_number
-----------
12345.67
(1 row)
-- numeric κ°κ³Ό numeric κ° ν¬λ§· λͺ¨λΈμ μ¬μ©νμ¬ numeric λ³ν
SELECT TO_NUMBER(12345.12467, 99999.9);
to_number
-----------
12345.1
(1 row)
-- μ μν κ°μ numericλ‘ λ³ν
SELECT TO_NUMBER(12345::int);
to_number
-----------
12345
(1 row)
-- double precision κ°μ numericλ‘ λ³ν
SELECT TO_NUMBER(12345.67::double precision);
to_number
-----------
12345.67
(1 row)ADD_MONTHS
(
date IN,
number IN
)
RETURNS date;
ADD_MONTHS
(
TIMESTAMP WITH TIME ZONE IN,
number IN
)
RETURNS TIMESTAMP WITH TIME ZONE;
ADD_MONTHS
(
TIMESTAMP WITHOUT TIME ZONE IN,
number IN
)
RETURNS TIMESTAMP WITHOUT TIME ZONE;# ν
μ€νΈ 1
select add_months('2023-01-31'::date, 3);
add_months
------------
2023-04-30
(1 row)
# ν
μ€νΈ 2
select add_months('2023-01-31'::date, 3.9999);
add_months
------------
2023-04-30
(1 row)
# ν
μ€νΈ 3
SELECT ADD_MONTHS('2023-01-31 15:30:00+09'::timestamptz, 1);
add_months
---------------------
2023-02-28 15:30:00
(1 row)
# ν
μ€νΈ 4
SELECT ADD_MONTHS('2023-01-31 15:30:00+09'::timestamptz, 1.3);
add_months
---------------------
2023-02-28 15:30:00
(1 row)