접근 연산자
a[N] – 배열 요소에 접근합니다. arrayElement(a, N) 함수입니다.
a.N – 튜플 요소에 접근합니다. tupleElement(a, N) 함수입니다.
숫자 부호 반전 연산자
-a – negate(a) 함수입니다.
튜플 부호 반전은 다음을 참조하십시오: tupleNegate.
곱셈 및 나눗셈 연산자
a * b – multiply(a, b) 함수입니다.
튜플에 숫자를 곱하려면 tupleMultiplyByNumber, 스칼라 곱에는 dotProduct를 사용합니다.
a / b – divide(a, b) 함수입니다.
튜플을 숫자로 나누려면 tupleDivideByNumber를 사용합니다.
a % b – modulo(a, b) 함수입니다。
덧셈 및 뺄셈 연산자
a + b – plus(a, b) 함수입니다.
튜플 덧셈: tuplePlus.
a - b – minus(a, b) 함수입니다.
튜플 뺄셈: tupleMinus.
비교 연산자
equals 함수
a = b – equals(a, b) 함수입니다.
a == b – equals(a, b) 함수입니다.
notEquals 함수
a != b – notEquals(a, b) 함수입니다.
a <> b – notEquals(a, b) 함수입니다.
lessOrEquals 함수
a <= b - lessOrEquals(a, b) 함수입니다.
greaterOrEquals 함수
a >= b – greaterOrEquals(a, b) 함수입니다.
less 함수
a < b – less(a, b) 함수입니다.
greater 함수
a > b – greater(a, b) 함수입니다.
like 함수
a LIKE b – like(a, b) 함수입니다.
notLike 함수
a NOT LIKE b – notLike(a, b) 함수입니다.
ilike 함수
a ILIKE b – ilike(a, b) 함수입니다.
BETWEEN 함수
a BETWEEN b AND c – a >= b AND a <= c와 동일합니다.
a NOT BETWEEN b AND c – a < b OR a > c와 동일합니다.
is not distinct from 연산자 (<=>)
25.10부터는
<=>를 다른 연산자와 마찬가지로 사용할 수 있습니다.
25.10 이전에는 JOIN 표현식에서만 사용할 수 있었으며, 예를 들면 다음과 같습니다:<=> 연산자는 NULL-안전 동등 연산자이며, IS NOT DISTINCT FROM과 동일합니다.
이 연산자는 일반 동등 연산자(=)처럼 동작하지만, NULL 값도 비교할 수 있도록 처리합니다.
두 NULL 값은 같다고 간주되며, NULL을 NULL이 아닌 값과 비교하면 NULL이 아니라 0(false)을 반환합니다.
문자열을 다루는 연산자
OVERLAY
OVERLAY(string PLACING replacement FROM offset)-overlay(string, replacement, offset)함수입니다.OVERLAY(string PLACING replacement FROM offset FOR length)-overlay(string, replacement, offset, length)함수입니다.OVERLAYUTF8(string PLACING replacement FROM offset)-overlayUTF8(string, replacement, offset)함수입니다.OVERLAYUTF8(string PLACING replacement FROM offset FOR length)-overlayUTF8(string, replacement, offset, length)함수입니다.
데이터 세트 작업을 위한 연산자
in 함수
a IN ... – in(a, b) 함수입니다.
notIn 함수
a NOT IN ...에 해당하는 notIn(a, b) 함수입니다.
globalIn 함수
a GLOBAL IN ... – globalIn(a, b) 함수입니다.
globalNotIn 함수
a GLOBAL NOT IN ... – globalNotIn(a, b) 함수입니다.
in 서브쿼리 함수
a = ANY (subquery) – in(a, subquery) 함수와 같습니다.
notIn 서브쿼리 함수
a != ANY (subquery) – a NOT IN (SELECT singleValueOrNull(*) FROM subquery)와 동일합니다.
in subquery 함수
a = ALL (subquery) – a IN (SELECT singleValueOrNull(*) FROM subquery)와 같습니다.
notIn 서브쿼리 함수
a != ALL (subquery) – notIn(a, subquery) 함수입니다.
예시
ALL을 사용한 쿼리:
Query
Response
Query
Response
날짜 및 시간을 다루는 연산자
EXTRACT
part 매개변수는 날짜에서 추출할 부분을 지정합니다. 사용할 수 있는 값은 다음과 같습니다.
SECOND— 초입니다. 가능한 값: 0–59.MINUTE— 분입니다. 가능한 값: 0–59.HOUR— 시입니다. 가능한 값: 0–23.DAY— 일입니다. 가능한 값: 1–31.WEEK— ISO 8601 주 번호입니다. 가능한 값: 1–53.MONTH— 월 번호입니다. 가능한 값: 1–12.QUARTER— 분기입니다. 가능한 값: 1–4.YEAR— 연도입니다.EPOCH— Unix timestamp(1970-01-01 00:00:00 UTC 이후의 초)입니다. 참고:DateTime64의 경우 소수점 이하 초 부분은 잘립니다.DOW— 요일(PostgreSQL 호환)입니다. 0 = 일요일, 6 = 토요일입니다.DOY— 연중 날짜입니다. 가능한 값: 1–366.ISODOW— ISO 요일입니다. 1 = 월요일, 7 = 일요일입니다.ISOYEAR— ISO 8601 주 번호 기준 연도입니다.CENTURY— 세기입니다. 예를 들어, 2024년은 21세기에 속합니다.DECADE— 10년 단위입니다(연도를 10으로 나눈 값). 예를 들어, 2024년의 decade는 202입니다.MILLENNIUM— 천년 단위입니다. 예를 들어, 2024년은 세 번째 millennium에 속합니다.
part 매개변수는 대소문자를 구분하지 않습니다.
date 매개변수는 처리할 날짜 또는 시간을 지정합니다. Date, Date32, DateTime, DateTime64 타입을 지원합니다.
예시:
DateTime 유형의 값을 삽입합니다.
INTERVAL
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
INTERVAL 값을 지정할 때 문자열 리터럴을 사용할 수도 있습니다. 예를 들어 INTERVAL 1 HOUR는 INTERVAL '1 hour' 또는 INTERVAL '1' hour와 동일합니다.
예시:
INTERVAL 구문 또는 addDays 함수를 사용하는 것이 항상 권장됩니다. 단순한 덧셈이나 뺄셈(now() + ... 같은 구문)은 시간 설정을 반영하지 않습니다. 예를 들어 일광 절약 시간제는 고려되지 않습니다.- 인터벌 데이터 타입
- toInterval 변환 함수
날짜 및 시간 덧셈
+ 연산자를 사용해 Time 또는 Time64 값에 더할 수 있습니다. 결과는 해당 날짜의 지정된 시각을 나타내는 DateTime 또는 DateTime64입니다. 이 연산은 교환법칙이 성립합니다.
결과 유형은 피연산자 유형에 따라 달라집니다.
| 왼쪽 피연산자 | 오른쪽 피연산자 | 결과 유형 |
|---|---|---|
Date | Time | DateTime |
Date | Time64(s) | DateTime64(s) |
Date32 | Time | DateTime64(0) |
Date32 | Time64(s) | DateTime64(s) |
결과에는 세션 시간대(session timezone)가 사용됩니다(세션 시간대가 설정되지 않은 경우 서버 기본 시간대 사용).
date_time_overflow_behavior 설정은 결과가 표현 가능한 범위를 벗어날 때의 동작을 제어합니다.논리 AND 연산자
SELECT a AND b — 함수 and로 a와 b의 논리곱을 계산합니다.
논리 OR 연산자
SELECT a OR b — or 함수를 사용해 a와 b의 논리합을 계산합니다.
논리 부정 연산자
SELECT NOT a — 함수 not를 사용해 a의 논리 부정을 계산합니다.
조건 연산자
a ? b : c – if(a, b, c) 함수입니다.
참고:
조건 연산자는 먼저 b와 c의 값을 계산한 다음, 조건 a가 참인지 확인하고 그에 해당하는 값을 반환합니다. b 또는 C가 arrayJoin() 함수인 경우, “a” 조건과 관계없이 각 행이 복제됩니다.
조건부 표현식
x가 지정되면 transform(x, [a, ...], [b, ...], c) 함수를 사용합니다. 그렇지 않으면 multiIf(a, b, ..., c)를 사용합니다.
표현식에 ELSE c 절이 없으면 기본값은 NULL입니다.
transform 함수는 NULL에서는 작동하지 않습니다.
연결 연산자
s1 || s2 – concat(s1, s2) 함수입니다.
람다 생성 연산자
x -> expr – lambda(x, expr) 함수.
다음 연산자는 괄호이므로 우선순위가 없습니다:
배열 생성 연산자
[x1, ...] – array(x1, ...) 함수.
튜플 생성 연산자
(x1, x2, ...) – tuple(x2, x2, ...) 함수입니다.
결합 방향
1 + 2 + 3은 plus(plus(1, 2), 3)으로 변환됩니다.
하지만 때로는 이것이 예상대로 동작하지 않을 수 있습니다. 예를 들어 SELECT 4 > 2 > 3의 결과는 0입니다.
효율성을 위해 and 및 or 함수는 인수를 개수 제한 없이 받을 수 있습니다. 이에 해당하는 AND 및 OR 연산자 체인은 이 함수를 한 번 호출하는 형태로 변환됩니다.
NULL 검사하기
IS NULL 및 IS NOT NULL 연산자를 지원합니다.
IS NULL
- 널 허용 타입 값에서
IS NULL연산자는 다음을 반환합니다.- 값이
NULL이면1 - 그렇지 않으면
0
- 값이
- 그 밖의 값에서는
IS NULL연산자가 항상0을 반환합니다.
optimize_functions_to_subcolumns = 1이면 함수는 전체 컬럼 데이터를 읽고 처리하는 대신 null 서브컬럼만 읽습니다. SELECT n IS NULL FROM table 쿼리는 SELECT n.null FROM TABLE로 변환됩니다.
IS NOT NULL
- 널 허용 타입의 값에 대해
IS NOT NULL연산자는 다음 값을 반환합니다.- 값이
NULL이면0 - 그렇지 않으면
1
- 값이
- 그 밖의 값에 대해서는
IS NOT NULL연산자가 항상1을 반환합니다.
optimize_functions_to_subcolumns = 1이면 함수는 전체 컬럼 데이터를 읽고 처리하는 대신 null 서브컬럼만 읽습니다. 쿼리 SELECT n IS NOT NULL FROM table는 SELECT NOT n.null FROM TABLE로 변환됩니다.