SnowConvert: Redshift 함수¶
시스템 함수¶
IDENTITY¶
설명 ¶
IDENTITY 함수는 테이블의 지정된 열에서 작업을 수행하여 ID의 초기 값을 결정하는 시스템 함수입니다. 초기값을 사용할 수 없는 경우 기본값은 함수에 제공된 값으로 설정됩니다. 이것은 Snowflake의 시퀀스로 변환됩니다.
문법 구문 ¶
"identity"(oid_id, oid_table_id, default)
참고
이 함수는 더 이상 Redshift에서 지원되지 않습니다. 기본값을 사용하여 ID를 정의하고 표준 ID 열처럼 작동합니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE IF NOT EXISTS table_test
(
id integer,
inventory_combo BIGINT DEFAULT "identity"(850178, 0, '5,3'::text)
);
INSERT INTO table_test (id) VALUES
(1),
(2),
(3),
(4);
SELECT * FROM table_test;
id |
inventory_combo |
---|---|
1 |
5 |
2 |
8 |
3 |
11 |
3 |
14 |
출력 코드:
CREATE TABLE IF NOT EXISTS table_test
(
id integer,
inventory_combo BIGINT IDENTITY(5,3) ORDER
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/13/2024", "domain": "test" }}';
INSERT INTO table_test (id) VALUES
(1),
(2),
(3),
(4);
SELECT * FROM
table_test;
id |
inventory_combo |
---|---|
1 |
5 |
2 |
8 |
3 |
11 |
3 |
14 |
문자열 함수¶
BTRIM¶
설명 ¶
BTRIM 함수는 선행 및 후행 공백을 제거하거나 선택적으로 지정된 문자열과 일치하는 선행 및 후행 문자를 제거하여 문자열을 다듬습니다. (RedShiftSQL Language Reference BTRIM 함수)
문법 구문 ¶
BTRIM(string [, trim_chars ] )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
SELECT ' abc ' AS untrim, btrim(' abc ') AS trim;
SELECT 'setuphistorycassettes' AS untrim, btrim('setuphistorycassettes', 'tes') AS trim;
utrim |
trim |
---|---|
abc |
abc |
untrim |
trim |
---|---|
setuphistorycassettes |
uphistoryca |
출력 코드:
SELECT ' abc ' AS untrim,
TRIM(' abc ') AS trim;
SELECT 'setuphistorycassettes' AS untrim,
TRIM('setuphistorycassettes', 'tes') AS trim;
utrim |
trim |
---|---|
abc |
abc |
untrim |
trim |
---|---|
setuphistorycassettes |
uphistoryca |
문제 파악
문제가 발견되지 않았습니다.
Related EWIs
알려진 문제는 없습니다.
CONCAT
Description
CONCAT 함수는 두 식을 연결하여 결과 식을 반환합니다. (RedShift SQL Language References CONCAT 함수) .
Grammar Syntax
CONCAT ( expression1, expression2 )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE test_concat_function (
col1 varchar
);
INSERT INTO test_concat_function
VALUES ('name');
SELECT CONCAT(col1, ' TEST '),
"CONCAT"(col1, ' TEST '),
col1 || ' TEST '
FROM test_concat_function;
CONCAT(col1, ' TEST ') | "CONCAT"(col1, ' TEST ') | col1 || ' TEST ' |
---|---|---|
name TEST | name TEST | name TEST |
출력 코드:
CREATE TABLE test_concat_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_concat_function
VALUES ('name');
SELECT CONCAT(col1, ' TEST '),
CONCAT(col1, ' TEST '),
col1 || ' TEST '
FROM
test_concat_function;
CONCAT(NAME, ' TEST ') | "CONCAT"(NAME, ' TEST ') | NAME || ' TEST ' |
---|---|---|
name TEST | name TEST | name TEST |
관련 EWIs¶
알려진 문제는 없습니다.
LEFT 및 RIGHT¶
설명 ¶
이 함수는 문자열에서 지정된 수의 가장 왼쪽 또는 가장 오른쪽 문자를 반환합니다. (SQL Language References LEFT 및 RIGHT 함수) .
문법 구문 ¶
LEFT( string, integer )
RIGHT( string, integer )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
SELECT LEFT('Chicago', 3) AS left_3, RIGHT('Chicago', 3) AS right_3;
left_3 |
right_3 |
---|---|
Chi |
ago |
출력 코드:
SELECT LEFT('Chicago', 3) AS left_3, RIGHT('Chicago', 3) AS right_3;
left_3 |
right_3 |
---|---|
Chi |
ago |
Know Issues
Snowflake와 Redshift에서 LEFT
및 RIGHT
함수는 음수 값을 다르게 처리합니다.
Snowflake: 두 번째 인자가 음수일 때 빈 문자열을 반환합니다.
Redshift: 음수 값으로 런타임 오류를 발생시킵니다.
Related EWIs
알려진 문제는 없습니다.
LOWER
Description
LOWER 함수는 문자열을 소문자로 변환합니다. (RedShift SQL Language Reference 소문자 함수)
Grammar Syntax
LOWER ( string )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE test_lower_function (
col1 varchar
);
INSERT INTO test_lower_function
VALUES ('test'),
('Test'),
('TEST');
SELECT LOWER(COL1),
"LOWER"(COL1),
LOWER('vaLues')
FROM test_lower_function;
LOWER(COL1) | "LOWER"(COL1) | LOWER('vaLues') |
---|---|---|
test | test | values |
test | test | values |
test | test | values |
출력 코드:
CREATE TABLE test_lower_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/21/2024", "domain": "test" }}';
INSERT INTO test_lower_function
VALUES ('test'),
('Test'),
('TEST');
SELECT LOWER(COL1),
LOWER(COL1),
LOWER('vaLues')
FROM
test_lower_function;
LOWER(COL1) |
“LOWER”(COL1) |
LOWER(‘vaLues’) |
---|---|---|
test |
test |
값 |
test |
test |
값 |
test |
test |
값 |
관련 EWIs¶
알려진 문제는 없습니다.
QUOTE_IDENT¶
설명 ¶
QUOTE_IDENT 함수는 지정된 문자열을 선행 큰따옴표와 후행 큰따옴표가 있는 문자열로 반환합니다. (RedShift SQL Language ReferenceQUOTE_IDENT 함수).
이 함수의 기능을 복제하려면 CONCAT 함수로 변환합니다.
문법 구문 ¶
QUOTE_IDENT(string)
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
SELECT
QUOTE_IDENT('"CAT"'),
"QUOTE_IDENT"('Foo bar') ;
quote_ident |
quote_ident |
---|---|
“””CAT””” |
“Foo bar””” |
출력 코드:
SELECT
CONCAT('"', REPLACE('"CAT"', '"', '""'), '"'),
CONCAT('"', REPLACE('Foo bar', '"', '""'), '"');
quote_ident |
quote_ident |
---|---|
“””CAT””” |
“Foo bar””” |
알려진 문제
문제가 발견되지 않았습니다.
Related EWIs
알려진 문제는 없습니다.
REGEXP_REPLACE
Description
이 함수는 문자열에서 정규식 패턴을 검색하고 패턴이 발생할 때마다 지정된 문자열로 바꿉니다. (SQL Language References REGEXP_REPLACE 함수).
Grammar Syntax
REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )
경고
이 함수는 Snowflake 에서 부분적으로 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE my_table (col1 varchar);
SELECT regexp_replace('the fox', 'FOX', 'quick brown fox', 1, 'ip');
SELECT
regexp_replace(d, '[hidden]'),
regexp_replace(d, f)
FROM
(SELECT
regexp_replace('pASswd7','(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+') as d, 'passwd7' as f);
SELECT regexp_replace(col1, 'passwd7', '[hidden]', 1, 'ip') as rp from my_table;
regexp_replace |
regexp_replace |
regexp_replace |
---|---|---|
the quick brown fox |
pASsw7 |
pASsw7 |
출력 코드:
CREATE TABLE my_table (col1 varchar)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "00/00/0000", "domain": "test" }}';
SELECT
REGEXP_REPLACE('the fox', 'FOX', 'quick brown fox', 1, 0, 'i');
SELECT
REGEXP_REPLACE(d, '[hidden]'),
REGEXP_REPLACE(d,
--** SSC-FDM-0032 - PARAMETER 'regex_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
f)
FROM
(SELECT
REGEXP_REPLACE('pASswd7',
!!!RESOLVE EWI!!! /*** SSC-EWI-0009 - regexp_replace FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
'(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+') as d, 'passwd7' as f);
SELECT
REGEXP_REPLACE(col1, 'passwd7', '[hidden]', 1, 0, 'i') as rp from
my_table;
REGEXP_REPLACE |
RESULT |
---|---|
the quick brown fox |
100048 (2201B): 잘못된 정규식:’(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+’, 반복 연산자에 대한 인자 없음: ? |
문제 파악¶
이 함수에는 사용자가
p
값으로 표시되는 Perl 호환 정규식(PCRE) 언어를 사용하여 패턴을 해석할 수 있는parameters
인자가 포함되어 있으며, 코드를 수정할 때 문제를 방지하기 위해 제거했습니다.
관련 EWIs¶
SSC-EWI-0009: Regexp_Substr 함수는 POSIX 정규식만 지원합니다.
SSC-FDM-0032: 매개 변수가 리터럴 값이 아니므로 변환을 완전히 적용할 수 없습니다
SSC-FDM- PG0011: 이 패턴 일치 조건에 대해 COLLATE 열 제약 조건의 사용이 비활성화되었습니다.
REPLACE¶
설명¶
기존 문자열 내의 문자 세트의 모든 문자를 지정된 다른 문자로 바꿉니다. (Redshift SQL Language Reference REPLACE 함수).
이 함수는 Snowflake 에서 완전히 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
Grammar Syntax
REPLACE(string, old_chars, new_chars)
Sample Source Patterns
Input Code:
SELECT REPLACE('Hello World', ' ', '_') AS modified_string,
REPLACE('Apple, Orange, Banana, Grape', ',', '') AS fruits,
REPLACE('http://example.com/path/to/resource', '/path/to', '/new-path') AS updated_url;
MODIFIED_STRING |
FRUITS |
UPDATED_URL |
---|---|---|
Hello_World |
Apple Orange Banana Grape |
http://example.com/new-path/resource |
출력 코드:
SELECT REPLACE('Hello World', ' ', '_') AS modified_string,
REPLACE('Apple, Orange, Banana, Grape', ',', '') AS fruits,
REPLACE('http://example.com/path/to/resource', '/path/to', '/new-path') AS updated_url;
MODIFIED_STRING |
FRUITS |
UPDATED_URL |
---|---|---|
Hello_World |
Apple Orange Banana Grape |
http://example.com/new-path/resource |
Known Issues
문제가 발견되지 않았습니다.
Related EWIs
알려진 문제는 없습니다.
SPLIT_PART
Description
지정된 구분 기호에서 문자열을 분할하고 지정된 위치의 부분을 반환합니다. (SQL Language Reference SPLIT_PART 함수).
Grammar Syntax
SPLIT_PART(string, delimiter, position)
이 함수는 Snowflake 에서 완전하게 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
select split_part('abc$def$ghi','$',2) AS split_1,
split_part('abc$def$ghi','$',4) AS split_2,
split_part('abc$def$ghi','#',1) AS split_3;
split_1 | split_2 | split_3 |
---|---|---|
def | abc$def$ghi |
출력 코드:
select split_part('abc$def$ghi','$',2) AS split_1,
split_part('abc$def$ghi','$',4) AS split_2,
split_part('abc$def$ghi','#',1) AS split_3;
split_1 | split_2 | split_3 |
---|---|---|
def | abc$def$ghi |
문제 파악¶
대/소문자를 구분하지 않는 데이터 정렬(CASE_INSENSITIVE
또는 en-ci
)과 함께 사용할 때 SPLIT_PART
가 작동하는 방식은 Snowflake와 Redshift에서 차이가 있습니다.
관련 EWIs¶
알려진 문제는 없습니다.
SUBSTRING¶
설명 ¶
지정된 시작 위치를 기준으로 문자열의 하위 집합을 반환합니다. (RedShift SUBSTRING 함수).
문법 구문 ¶
SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
SUBSTRING(character_string, start_position, number_characters )
SUBSTRING(binary_expression, start_byte, number_bytes )
SUBSTRING(binary_expression, start_byte )
경고
이 함수는 Snowflake 에서 부분적으로 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
SELECT SUBSTRING('machine' FROM 3 for 2) AS machien_3_2, SUBSTRING('machine',1,4) AS machine_1_4;
SELECT SUBSTRING('12345'::varbyte, 2, 4) AS substring_varbyte;
machien_3_2 |
machine_1_4 |
---|---|
ch |
mach |
출력 코드:
SELECT SUBSTRING('machine', 3, 2) AS machien_3_2, SUBSTRING('machine',1,4) AS machine_1_4;
SELECT SUBSTRING('12345':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_varbyte;
machien_3_2 |
machine_1_4 |
---|---|
ch |
mach |
문제 파악¶
Redshift의 start_position
이 0 이하인 경우 SUBSTRING
함수는 수학 연산(start_position + number_characters
)을 수행합니다. 결과가 0 이하인 경우 SUBSTRING
은 빈 문자열을 반환합니다. Snowflake에서 start_position
이 0 이하일 때의 동작이 달라서 결과가 달라집니다.
관련 EWIs¶
알려진 문제는 없습니다.
TRIM¶
설명 ¶
TRIM 함수는 문자열을 공백 또는 지정된 문자로 잘라냅니다. (RedShift SQL Language Reference TRIM 함수)
Redshift에서는 키워드(BOTH
, LEADING
또는 TRAILING
)를 사용하여 트림 작업을 수행할 위치를 지정할 수 있습니다. 이 기능은 각각 TRIM
, LTRIM
, RTRIM
함수를 사용하여 Snowflake에서 복제할 수 있습니다.
문법 구문 ¶
TRIM( [ BOTH | LEADING | TRAILING ] [trim_chars FROM ] string )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
SELECT TRIM(' dog ') AS SimpleTrim;
SELECT TRIM(LEADING '"' FROM'"dog"') AS LeadingTrim;
SELECT TRIM(TRAILING '"' FROM'"dog"') AS TrailingTrim;
SELECT TRIM('x' FROM 'xxxHello Worldxxx') AS FromTrim;
SimpleTrim |
---|
dog |
LeadingTrim |
---|
dog” |
TrailingTrim |
---|
“dog |
FromTrim |
---|
Hello World |
출력 코드:
SELECT TRIM(' dog ') AS SimpleTrim;
SELECT
LTRIM('"dog"', '"') AS LeadingTrim;
SELECT
RTRIM('"dog"', '"') AS TrailingTrim;
SELECT
TRIM('xxxHello Worldxxx', 'x') AS FromTrim;
SimpleTrim |
---|
dog |
LeadingTrim |
---|
dog” |
TrailingTrim |
---|
“dog |
FromTrim |
---|
Hello World |
Know Issues
문제가 발견되지 않았습니다.
Related EWIs
알려진 문제는 없습니다.
UPPER
Description
UPPER 함수는 문자열을 대문자로 변환합니다. (RedShift SQL Language Reference 대문자함수)
Grammar Syntax
UPPER ( string )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE test_upper_function (
col1 varchar
);
INSERT INTO test_upper_function
VALUES ('test'),
('Test'),
('TEST');
SELECT UPPER(COL1),
"UPPER"(COL1),
UPPER('vaLues')
FROM test_upper_function;
UPPER(COL1) | "UPPER"(COL1) | UPPER('vaLues') |
---|---|---|
TEST | TEST | VALUES |
TEST | TEST | VALUES |
TEST | TEST | VALUES |
출력 코드:
CREATE TABLE test_upper_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/21/2024", "domain": "test" }}';
INSERT INTO test_upper_function
VALUES ('test'),
('Test'),
('TEST');
SELECT UPPER(COL1),
UPPER(COL1),
UPPER('vaLues')
FROM
test_upper_function;
UPPER(COL1) |
“UPPER”(COL1) |
UPPER(‘vaLues’) |
---|---|---|
TEST |
TEST |
VALUES |
TEST |
TEST |
VALUES |
TEST |
TEST |
VALUES |
관련 EWIs¶
알려진 문제는 없습니다.
집계 함수¶
AVG¶
설명¶
AVG 함수는 입력 식 값의 평균(산술 평균)을 반환합니다. (Redshift SQL Language Reference AVG 함수)
이 함수는 Snowflake 에서 완전하게 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
Grammar Syntax
AVG ( [ DISTINCT | ALL ] expression )
Sample Source Patterns
설정 데이터
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column SUPER
);
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column VARIANT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/27/2024", "domain": "test" }}';
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
Input Code:
SELECT
AVG(DISTINCT my_smallint_column) AS type_smallint,
AVG(ALL my_integer_column) AS type_integer,
AVG(my_bigint_column) AS type_bigint,
AVG(my_numeric_column) AS type_numeric,
AVG(my_decimal_column) AS type_decimal,
AVG(my_real_column) AS type_real,
AVG(my_double_precision_column) AS type_double_precision,
AVG(my_super_column) AS type_super
FROM example_table;
type_smallint |
type_integer |
type_bigint |
type_numeric |
type_decimal |
type_real |
type_double_precision |
type_super |
---|---|---|---|---|---|---|---|
3 |
300 |
30000000000 |
345 |
676 |
2.2080000400543214 |
2.40674 |
46779 |
Output Code:
SELECT
AVG(DISTINCT my_smallint_column) AS type_smallint,
AVG(ALL my_integer_column) AS type_integer,
AVG(my_bigint_column) AS type_bigint,
AVG(my_numeric_column) AS type_numeric,
AVG(my_decimal_column) AS type_decimal,
AVG(my_real_column) AS type_real,
AVG(my_double_precision_column) AS type_double_precision,
AVG(my_super_column) AS type_super
FROM example_table;
type_smallint |
type_integer |
type_bigint |
type_numeric |
type_decimal |
type_real |
type_double_precision |
type_super |
---|---|---|---|---|---|---|---|
3.000000 |
300.000000 |
30000000000.000000 |
345.800000 |
676.400000 |
2.208 |
2.40674 |
46779 |
참고
AVG 는 데이터 타입에 따라 반올림 및 형식이 다르게 동작할 수 있으며, 이로 인해 Redshift와 Snowflake를 비교할 때 전체 자릿수 또는 소수점 이하 자릿수가 달라질 수 있습니다.
Related EWIs
알려진 문제는 없습니다.
COUNT
Description
COUNT 함수는 식에 정의된 행을 계산합니다. (Redshift SQL Language Reference COUNT 함수)
COUNT
및 APPROXIMATE COUNT
은 COUNT
및 APPROX_COUNT_DISTINCT
에 의해 Snowflake에서 완벽하게 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
문법 구문¶
COUNT ( * | expression )
COUNT ( [ DISTINCT | ALL ] expression )
APPROXIMATE COUNT ( DISTINCT expression )
샘플 소스 패턴¶
설정 데이터¶
CREATE TABLE sales (
sale_id INT PRIMARY KEY,
product_id INT,
sale_amount DECIMAL(10, 2),
sale_date DATE,
customer_id INT
);
INSERT INTO sales (sale_id, product_id, sale_amount, sale_date, customer_id) VALUES
(1, 101, 100.00, '2024-01-01', 1001),
(2, 102, 200.00, '2024-01-01', 1002),
(3, 101, 150.00, '2024-01-02', 1001),
(4, 103, 250.00, '2024-01-02', 1003),
(5, 102, 300.00, '2024-01-03', 1002),
(6, 101, 200.00, '2024-01-03', 1004),
(7, 101, 120.00, '2024-01-04', 1001),
(8, 102, 180.00, '2024-01-04', 1005),
(9, 103, 300.00, '2024-01-05', 1003),
(10, 101, 130.00, '2024-01-05', 1006),
(10, 101, 130.00, '2024-01-05', 1006);
입력 코드:¶
SELECT
product_id,
COUNT(sale_id) AS total_sales,
"COUNT"(DISTINCT sale_id) AS total_sales_distinct,
"count"(ALL sale_id) AS total_sales_all,
COUNT(*) AS total_sales_asterisk,
APPROXIMATE COUNT ( DISTINCT sale_id) AS aprroximate_count_total_sales
FROM
sales
GROUP BY
product_id
ORDER BY
total_sales DESC;
PRODUCT_ID | TOTAL_SALES | TOTAL_SALES_DISTINCT | TOTAL_SALES_ALL | TOTAL_SALES_ASTERISK | APRROXIMATE_COUNT_TOTAL_SALES |
---|---|---|---|---|---|
101 | 6 | 5 | 6 | 6 | 5 |
102 | 3 | 3 | 3 | 3 | 3 |
103 | 2 | 2 | 2 | 2 | 2 |
출력 코드:¶
SELECT
product_id,
COUNT(sale_id) AS total_sales,
COUNT(DISTINCT sale_id) AS total_sales_distinct,
COUNT(ALL sale_id) AS total_sales_all,
COUNT(*) AS total_sales_asterisk,
APPROX_COUNT_DISTINCT ( DISTINCT sale_id) AS aprroximate_count_total_sales
FROM
sales
GROUP BY
product_id
ORDER BY
total_sales DESC;
PRODUCT_ID | TOTAL_SALES | TOTAL_SALES_DISTINCT | TOTAL_SALES_ALL | TOTAL_SALES_ASTERISK | APRROXIMATE_COUNT_TOTAL_SALES |
---|---|---|---|---|---|
101 | 6 | 5 | 6 | 6 | 5 |
102 | 3 | 3 | 3 | 3 | 3 |
103 | 2 | 2 | 2 | 2 | 2 |
알려진 문제 ¶
문제가 발견되지 않았습니다.
관련 EWIs¶
알려진 문제는 없습니다.
수학 함수¶
MAX¶
설명 ¶
MAX 함수는 행 세트의 최대값을 반환합니다. (RedShift SQL Language Reference MAX gkatn).
문법 구문 ¶
MAX ( [ DISTINCT | ALL ] expression )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
CREATE TABLE test_max_function (
col1 INT
);
INSERT INTO test_max_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MAX(COL1), MAX(DISTINCT COL1), MAX(ALL COL1) FROM test_max_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
200 |
200 |
200 |
출력 코드:
CREATE TABLE test_max_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_max_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MAX(COL1), MAX(DISTINCT COL1), MAX(ALL COL1) FROM
test_max_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
200 |
200 |
200 |
Related EWIs
알려진 문제는 없습니다.
MIN
Description
MIN 함수는 행 세트의 최소값을 반환합니다 (RedShift SQL Language Reference MIN 함수).
Grammar Syntax
MIN ( [ DISTINCT | ALL ] expression )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE test_min_function (
col1 INT
);
INSERT INTO test_min_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MIN(COL1), MIN(DISTINCT COL1), MIN(ALL COL1) FROM test_min_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
2 |
2 |
2 |
출력 코드:
CREATE TABLE test_min_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_min_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MIN(COL1), MIN(DISTINCT COL1), MIN(ALL COL1) FROM
test_min_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
2 |
2 |
2 |
관련 EWIs¶
알려진 문제는 없습니다.
NUMERIC¶
설명 ¶
NUMERIC 함수는 문자열 값을 숫자 값으로 형변환하는 시스템 함수입니다.
이 함수는 Snowflake 에서 완전히 지원됩니다.
Grammar Syntax
select "numeric"(VARCHAR);
Sample Source Patterns
Input Code:
SELECT "numeric"('2024');
“숫자” |
---|
2024 |
출력 코드:
SELECT
TO_NUMERIC('2024');
TO_NUMERIC |
---|
2024 |
Related EWIs
알려진 문제는 없습니다.
ROUND
Description
ROUND 함수는 숫자를 가장 가까운 정수 또는 소수로 반올림합니다. (RedShift SQL Language Reference ROUND 함수).
Grammar Syntax
ROUND(number [ , integer ] )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
SELECT 28.05 AS score, ROUND(28.05) AS round_score;
SELECT 15.53969483712 AS comission, ROUND(15.53969483712, 2) AS round_comission;
점수 |
round_score |
---|---|
28.05 |
28 |
comission |
round_comission |
---|---|
15.53969483712 |
15.54 |
출력 코드:
SELECT 28.05 AS score, ROUND(28.05) AS round_score;
SELECT 15.53969483712 AS comission, ROUND(15.53969483712, 2) AS round_comission;
점수 |
round_score |
---|---|
28.05 |
28 |
comission |
round_comission |
---|---|
15.53969483712 |
15.54 |
관련 EWIs¶
알려진 문제는 없습니다.
SUM¶
설명 ¶
SUM 함수는 입력 열 또는 식 값의 합계를 반환합니다. (RedShift SQL Language Reference SUM 함수)
문법 구문 ¶
SUM ( [ DISTINCT | ALL ] expression )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
CREATE TABLE test_sum_function (
col1 INT
);
INSERT INTO test_sum_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT SUM(COL1), SUM(DISTINCT COL1), SUM(ALL COL1) FROM test_sum_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
224 |
222 |
224 |
출력 코드:
CREATE TABLE test_sum_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_sum_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT SUM(COL1), SUM(DISTINCT COL1), SUM(ALL COL1) FROM
test_sum_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
224 |
222 |
224 |
Related EWIs
알려진 문제는 없습니다.
TRUNC
Description
TRUNC 함수는 숫자를 이전 정수 또는 소수로 잘라냅니다.
자세한 내용은 TRUNC 함수를 참조하십시오.
Grammar Syntax
TRUNC(number [ , integer ])
이 함수는 Snowflake 에서 완전하게 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE test_trunc_function (
col1 INT,
col2 FLOAT
);
INSERT INTO test_trunc_function
VALUES ('200','111.13'),
('20','111.133444'),
('2','111.1350');
SELECT TRUNC(col1, -1), TRUNC(col2, -1) FROM test_trunc_function;
TRUNC(COL1, -1) |
TRUNC(COL2, -1) |
---|---|
200 |
110 |
20 |
110 |
0 |
110 |
출력 코드:
CREATE TABLE test_trunc_function (
col1 INT,
col2 FLOAT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/30/2024" }}';
INSERT INTO test_trunc_function
VALUES ('200','111.13'),
('20','111.133444'),
('2','111.1350');
SELECT TRUNC(col1, -1), TRUNC(col2, -1) FROM test_trunc_function;
TRUNC(COL1, -1) |
TRUNC(COL2, -1) |
---|---|
200 |
110 |
20 |
110 |
0 |
110 |
관련 EWIs¶
알려진 문제는 없습니다.
데이터 타입 형식 지정 함수¶
TO_DATE¶
설명¶
TO\DATE 는 문자 문자열로 표시된 날짜를 DATE 데이터 타입으로 변환합니다. (Redshift SQL Language Reference TO_DATE 함수)
이 함수는 Snowflake 에서 완전히 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
Grammar Syntax
TO_DATE(string, format, [is_strict])
Sample Source Patterns
Input Code:
SELECT TO_DATE('02 Oct 2001', 'DD Mon YYYY');
SELECT TO_DATE('20010631', 'YYYYMMDD', FALSE);
SELECT TO_DATE('20010631', 'YYYYMMDD', TRUE);
SELECT TO_DATE('1,993 12 23', 'Y,YYY MM DD');
SELECT TO_DATE(d, 'YYYY/MM/DD'),
TO_DATE(d, f)
FROM (SELECT '2001-01-01'::date as d, 'DD/MM/YYYY' as f);
to_date |
to_date |
to_date |
---|---|---|
2001-10-02 |
2001-07-01 |
[22008] ERROR: 날짜/시간 필드 날짜 값이 범위를 벗어남: 2001-6-31 |
Output Code:
SELECT TO_DATE('02 Oct 2001', 'DD Mon YYYY');
SELECT
TRY_TO_DATE(/*** SSC-FDM-RS0004 - INVALID DATES WILL CAUSE ERRORS IN SNOWFLAKE ***/ '20010631', 'YYYYMMDD');
SELECT TO_DATE('20010631', 'YYYYMMDD');
SELECT TO_DATE('1,993 12 23', 'Y,YYY MM DD') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - Y,YYY MM DD FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!;
SELECT TO_DATE(d, 'YYYY/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_DATE(d, f)
FROM (SELECT '2001-01-01'::date as d, 'DD/MM/YYYY' as f);
to_date |
to_date |
to_date |
---|---|---|
2001-10-02 |
NULL |
‘20010631’를 ‘YYYYMMDD’ 형식의 날짜로 구문 분석할 수 없습니다 |
Known Issues
SELECT TO_DATE('20010631', 'YYYYMMDD')
쿼리는 6월이 30일밖에 되지 않아 Snowflake에서 실패하고,is_strict
가 false로 설정되어 7월 1일로 변환하는 Redshift의TO_DATE
와 달리 Snowflake의TO_DATE
는 유효하지 않은 날짜를 자동으로 조정하지 못합니다. 잘못된 날짜 문자열로 인한 오류를 방지하려면 변환에 실패하면NULL
을 반환하는TRY_TO_DATE
를 사용할 수 있습니다. 이를 통해 쿼리 실행이 원활해지고 유효하지 않은 날짜를 쉽게 식별할 수 있습니다.
Related EWIs
SSC-FDM-RS0004: 유효하지 않은 날짜는 Snowflake에서 오류를 발생시킵니다.
SSC-EWI-PG0005 Snowflake에서는 날짜 또는 시간 형식이 지원되지 않습니다.
SSC-FDM-0032: 매개 변수가 리터럴 값이 아니므로 변환을 완전히 적용할 수 없습니다
TO_CHAR
Description
TO\CHAR 타임스탬프 또는 숫자 식을 문자 문자열 데이터 형식으로 변환합니다. (Redshift SQL Language Reference TO_CHAR 함수)
경고
이 함수는 Snowflake 에서 부분적으로 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
문법 구문¶
TO_CHAR(timestamp_expression | numeric_expression , 'format')
샘플 소스 패턴¶
입력 코드:¶
SELECT TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYYY'),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYY'),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'TH'),
"to_char"(timestamp '2009-12-31 23:15:59', 'MON-DY-DD-YYYY HH12:MIPM'),
TO_CHAR(125.8, '999.99'),
"to_char"(125.8, '999.99');
TO_CHAR |
TO_CHAR |
TO_CHAR |
TO_CHAR |
TO_CHAR |
---|---|---|---|---|
2009 |
009 |
DEC-THU-31-2009 11:15PM |
125.80 |
125.80 |
출력 코드:¶
SELECT
TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYYY'),
PUBLIC.YEAR_PART_UDF(timestamp '2009-12-31 23:15:59', 3),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'TH') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - TH FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
PUBLIC.MONTH_SHORT_UDF(timestamp '2009-12-31 23:15:59', 'uppercase') || '-' || PUBLIC.DAYNAME_SHORT_UDF(timestamp '2009-12-31 23:15:59', 'uppercase') || TO_CHAR(timestamp '2009-12-31 23:15:59', '-DD-YYYY HH12:MI') || PUBLIC.MERIDIAN_INDICATORS_UDF(timestamp '2009-12-31 23:15:59', 'uppercase'),
TO_CHAR(125.8, '999.99'),
TO_CHAR(125.8, '999.99');
TO_CHAR |
TO_CHAR |
---|---|
2009 |
Dec-Thu-31-2009 11:15PM |
알려진 문제 ¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-PG0005: 현재 날짜/숫자 형식은 Snowflake에서 다른 동작을 할 수 있습니다.
날짜/시간 값의 경우¶
설명¶
다음 형식 문자열은 TO_CHAR 과 같은 함수에 적용됩니다. 이러한 문자열에는 날짜/시간 구분 기호(예: ‘-
’, ‘/
’ 또는 ‘:
’)와 다음 “dateparts” 및 “timeparts”가 포함될 수 있습니다. (Redshift 날짜/시간 형식 문자열 참조 페이지)
문법 구문¶
TO_CHAR (timestamp_expression, 'format')
다음 테이블은 각 형식 요소의 Snowflake에 대한 매핑을 지정합니다.
Redshift |
Snowflake |
참고 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
- |
직접 지원 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
이 UDF 가 올바르게 작동하려면 Snowflake 세션 매개 변수 |
|
|
|
|
|
|
|
- |
직접 지원 |
|
|
|
|
- |
직접 지원 |
|
- |
직접 지원 |
|
- |
직접 지원 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
redshift 설명서 에 따르면, 타임존이 있는 모든 타임스탬프는 UTC 로 저장되므로 이 형식 요소는 수정된 결과를 반환합니다 |
|
|
redshift 설명서 에 따르면, 타임존이 있는 모든 타임스탬프는 UTC 로 저장되므로 이 형식 요소는 수정된 결과를 반환합니다 |
|
|
|
|
이것은 “스펠 모드”에 대한 PostgreSQL 템플릿 패턴 수정자이지만 Redshift에서는 아무 작업도 수행하지 않으므로 출력에서 제거됩니다. |
|
|
이는 “수정된 형식”에 대한 또 다른 템플릿 패턴 수정자이지만, TO_CHAR 함수에서는 사용할 수 없으므로 제거합니다. |
샘플 소스 패턴¶
직접 형식 요소 변환(함수 없음/UDFs)¶
결과는 단일 TO_CHAR 함수로 보존됩니다
Redshift¶
SELECT TO_CHAR('2013-10-03 13:50:15.456871'::TIMESTAMP, 'DD/MM/YY HH:MI:SS.MS') AS col1;
+----------------------+
|col1 |
+----------------------+
|03/10/13 01:50:15.456 |
+----------------------+
Snowflake¶
SELECT TO_CHAR('2013-10-03 13:50:15.456871'::TIMESTAMP, 'DD/MM/YY HH12:MI:SS.FF3') AS col1;
+----------------------+
|col1 |
+----------------------+
|03/10/13 01:50:15.456 |
+----------------------+
함수를 사용한 형식 변환/UDFs¶
결과는 여러 개의 TO_CHAR, UDFs 및 Snowflake 기본 제공 함수를 연결하여 날짜/시간 값의 동등한 문자열 표현을 생성합니다
Redshift¶
SELECT TO_CHAR(DATE '2025-07-05', '"Today is " Month DAY DD, "it belongs to the week " IW') AS result;
+-------------------------------------------------------------+
|result |
+-------------------------------------------------------------+
|Today is July SATURDAY 05, it belongs to the week 27 |
+-------------------------------------------------------------+
Snowflake¶
SELECT
'Today is ' ||
TO_CHAR(DATE '2025-07-05', ' ') ||
PUBLIC.FULL_MONTH_NAME_UDF(DATE '2025-07-05', 'firstOnly') ||
' ' ||
PUBLIC.DAYNAME_LONG_UDF(DATE '2025-07-05', 'uppercase') ||
TO_CHAR(DATE '2025-07-05', ' DD, ') ||
'it belongs to the week ' ||
TO_CHAR(DATE '2025-07-05', ' ') ||
WEEKISO(DATE '2025-07-05') AS result;
+-------------------------------------------------------------+
|result |
+-------------------------------------------------------------+
|Today is July SATURDAY 05, it belongs to the week 27 |
+-------------------------------------------------------------+
인용된 텍스트¶
큰따옴표로 묶인 텍스트의 형식 요소는 해석하지 않고 바로 출력에 추가되며, 이스케이프된 큰따옴표는 Snowflake 이스케이프된 해당 요소로 변환됩니다.
Redshift¶
SELECT
TO_CHAR(DATE '2025-01-16', 'MM "TESTING DD" DD') AS result1,
TO_CHAR(DATE '2025-01-16', 'MM TESTING \\"DD\\" DD') AS result2,
TO_CHAR(DATE '2025-01-16', 'MM "TESTING \\"DD\\"" DD') AS result3;
+-----------------+-------------------+-------------------+
|result1 |result2 |result3 |
+-----------------+-------------------+-------------------+
|01 TESTING DD 16 |01 TEST5NG "16" 16 |01 TESTING "DD" 16 |
+-----------------+-------------------+-------------------+
Snowflake¶
SELECT
TO_CHAR(DATE '2025-01-16', 'MM ') || 'TESTING DD' || TO_CHAR(DATE '2025-01-16', ' DD') AS result1,
TO_CHAR(DATE '2025-01-16', 'MM TEST') || PUBLIC.ISO_YEAR_PART_UDF(DATE '2025-01-16', 1) || TO_CHAR(DATE '2025-01-16', 'NG ""DD"" DD') AS result2,
TO_CHAR(DATE '2025-01-16', 'MM ') || 'TESTING "DD"' || TO_CHAR(DATE '2025-01-16', ' DD') AS result3;
+-----------------+-------------------+-------------------+
|result1 |result2 |result3 |
+-----------------+-------------------+-------------------+
|01 TESTING DD 16 |01 TEST5NG "16" 16 |01 TESTING "DD" 16 |
+-----------------+-------------------+-------------------+
Known Issues¶
지원되지 않는 템플릿 패턴 수정자¶
다음 형식의 템플릿 수정자를 사용할 수 있습니다.
FM (채우기 모드)
TH 및 th(대문자 및 소문자 서수 접미사)
TM (변환 모드)
지원되지 않는 형식으로 포함하면 SSC-EWI-PG0005가 생성됩니다
입력 코드:
SELECT TO_CHAR(CURRENT_DATE, 'FMMonth'),
TO_CHAR(CURRENT_DATE, 'DDTH'),
TO_CHAR(CURRENT_DATE, 'DDth'),
TO_CHAR(CURRENT_DATE, 'TMMonth');
출력 코드:
SELECT
TO_CHAR(CURRENT_DATE(), 'FM') || PUBLIC.FULL_MONTH_NAME_UDF(CURRENT_DATE(), 'firstOnly') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - FMMonth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'DDTH') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - DDTH FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'DDth') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - DDth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'TM') || PUBLIC.FULL_MONTH_NAME_UDF(CURRENT_DATE(), 'firstOnly') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - TMMonth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!;
변수를 통해 전달된 형식 매개 변수
형식 매개 변수가 문자열 리터럴 대신 변수로 전달되면 형식 요소의 변환을 적용할 수 없으며, 함수 사용에 대한 FDM 경고가 추가됩니다.
입력 코드:
SELECT TO_CHAR(d, 'YYYY/MM/DD'),
TO_CHAR(d, f)
FROM (SELECT TO_DATE('2001-01-01','YYYY-MM-DD') as d, 'DD/MM/YYYY' as f);
출력 코드:
SELECT TO_CHAR(d, 'YYYY/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(d, f)
FROM (SELECT TO_DATE('2001-01-01','YYYY-MM-DD') as d, 'DD/MM/YYYY' as f);
관련 EWIs¶
SSC-EWI-PG0005: 현재 날짜/숫자 형식은 Snowflake에서 다른 동작을 할 수 있습니다.
SSC-FDM-0032: 매개 변수가 리터럴 값이 아니므로 변환을 완전히 적용할 수 없습니다
JSON 함수¶
JSON_EXTRACT_PATH_TEXT¶
설명 ¶
JSON_EXTRACT_PATH_TEXT 함수는 일련의 경로 요소가 참조하는 키-값 페어에 대한 값을 JSON 문자열로 반환합니다. (RedShift SQL Language Reference JSON_EXTRACT_PATH_TEXT 함수)
문법 구문 ¶
JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' as VALID_JSON,
'notvalidjson' as INVALID_JSON,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand') AS VALID_JSON_FLAG_DEFAULT_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand', false) AS VALID_JSON_FLAG_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand', true) AS VALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, 'house', 'appliances', 'washing machine', 'brand', true) AS INVALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, 'house', 'appliances', 'washing machine', 'brand', false) AS INVALID_JSON_FLAG_FALSE
;
VALID_JSON |
INVALID_JSON |
VALID_JSON_FLAG_DEFAULT_OFF |
VALID_JSON_FLAG_OFF |
VALID_JSON_FLAG_TRUE |
INVALID_JSON_FLAG_TRUE |
---|---|---|---|---|---|
- |
notvalidjson |
Any Brand |
Any Brand |
Any Brand |
NULL |
출력 코드:
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' as VALID_JSON,
'notvalidjson' as INVALID_JSON,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_DEFAULT_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_OFF,
JSON_EXTRACT_PATH_TEXT(TRY_PARSE_JSON(VALID_JSON), ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(TRY_PARSE_JSON(INVALID_JSON), ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS INVALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS INVALID_JSON_FLAG_FALSE
;
VALID_JSON |
INVALID_JSON |
VALID_JSON_FLAG_DEFAULT_OFF |
VALID_JSON_FLAG_OFF |
VALID_JSON_FLAG_TRUE |
INVALID_JSON_FLAG_TRUE |
---|---|---|---|---|---|
- |
notvalidjson |
Any Brand |
Any Brand |
Any Brand |
NULL |
변수를 경로로 사용한 입력 코드:
SELECT
'appliances' level_2,
'brand' level_4,
JSON_EXTRACT_PATH_TEXT(
INFO.VALID_JSON,
'house',
level_2,
'washing machine',
level_4
) result
FROM
(
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' AS VALID_JSON
) INFO;
level_2 |
level_4 |
결과 |
---|---|---|
appliances |
brand |
Any Brand |
출력 코드:
SELECT
'appliances' level_2,
'brand' level_4,
JSON_EXTRACT_PATH_TEXT(
INFO.VALID_JSON, ARRAY_TO_STRING(['house',
level_2, '"washing machine"',
level_4], '.')) result
FROM
(
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' AS VALID_JSON
) INFO;
level_2 |
level_4 |
결과 |
---|---|---|
appliances |
brand |
Any Brand |
Known Issues
Redshift는 줄 바꿈, 탭, 캐리지가 있는 문자를 Snowflake와 다르게 처리합니다. Redshift는 문자를 문자 자체로 해석합니다. Snowflake가 적용합니다.
Snowflake 함수는 두 개의 매개 변수를 받습니다. 첫 번째는 JSON Literal이고, 두 번째는 내부 오브젝트에 액세스하기 위해 점으로 구분된 경로입니다. 변환은 열 참조인 경우에도 경로 목록을 점으로 구분된 경로를 결합하는 함수로 바꿉니다.
경로가 변수를 통해 전송되고 변수에 공백이 포함되어 있는 경우 따옴표로 묶어야 합니다.
Related EWIs
문제가 발견되지 않았습니다.
해시 함수
FNV_HASH
Description
FNV_HASH 는 모든 기본 데이터 타입에 대해 64비트 FNV-1a 비암호화 해시 함수를 계산합니다.\ (Redshift SQL Language Reference FNV_HASH 함수).
참고
Snowflake에는 FNV 알고리즘을 제공하는 동등한 함수가 없지만, 대신 HASH 함수는 동일한 비암호화 기능을 제공합니다.
문법 구문¶
FNV_HASH(value [, seed])
샘플 소스 패턴¶
입력 코드:¶
SELECT FNV_HASH('John Doe') as FNV_HASH,
FNV_HASH('John Doe', 3) as FNV_HASH_SEED;
FNV_HASH |
FNV_HASH_SEED |
---|---|
-1568545727084176168 |
-5484851035903916490 |
출력 코드:¶
SELECT
HASH('John Doe') as FNV_HASH,
HASH('John Doe') as FNV_HASH_SEED;
FNV_HASH |
FNV_HASH_SEED |
---|---|
3199932455444588441 |
3199932455444588441 |
참고
Redshift의 FNV_HASH 함수에서는 시드 매개 변수가 선택 사항이지만, FNV 알고리즘에서만 시드 매개 변수가 사용되기 때문에 Snowflake의 해시 함수에서는 시드 매개 변수가 사용되지 않습니다.
알려진 문제 ¶
알려진 문제는 없습니다.
관련 EWIs¶
알려진 문제는 없습니다.
조건부 함수¶
COALESCE¶
설명 ¶
일련의 식에서 null이 아닌 첫 번째 식의 값을 반환합니다. Null이 아닌 값이 발견되면 목록의 나머지 식은 평가되지 않습니다.
자세한 내용은 COALESCE 함수를 참조하십시오.
문법 구문 ¶
COALESCE( expression, expression, ... )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15));
INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2)
VALUES(1, 'Company_ABC', NULL, '555-01111'),
(2, 'Company_DEF', '555-01222', NULL),
(3, 'Company_HIJ', '555-01333', '555-01444'),
(4, 'Company_KLM', NULL, NULL);
SELECT COALESCE(phone_region_1, phone_region_2) IF_REGION_1_NULL,
COALESCE(phone_region_2, phone_region_1) IF_REGION_2_NULL
FROM suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
---|---|
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
Null |
Null |
출력 코드:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO suppliers (supplier_id, supplier_name, phone_region_1, phone_region_2)
VALUES(1, 'Company_ABC', NULL, '555-01111'),
(2, 'Company_DEF', '555-01222', NULL),
(3, 'Company_HIJ', '555-01333', '555-01444'),
(4, 'Company_KLM', NULL, NULL);
SELECT COALESCE(phone_region_1, phone_region_2) IF_REGION_1_NULL,
COALESCE(phone_region_2, phone_region_1) IF_REGION_2_NULL
FROM
suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
---|---|
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
Null |
Null |
Related EWIs
알려진 문제는 없습니다.
GREATEST 및 LEAST
Description
임의의 수의 식 목록에서 가장 크거나 가장 작은 값을 반환합니다. (Redshift SQL Language Reference GREATEST 및 LEAST 함수)
Grammar Syntax
GREATEST (value [, ...])
LEAST (value [, ...])
이 함수는 Snowflake 에서 완전하게 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
SELECT GREATEST(10, 20, NULL, 40, 30) AS greatest, LEAST(10, 20, NULL, 40, 30) AS least, GREATEST(NULL, NULL, NULL) AS nulls;
SELECT LEAST('GERMANY', 'USA') AS LEAST, GREATEST('GERMANY', 'USA') AS GREATEST;
최대 |
최소 |
nulls |
---|---|---|
40 |
10 |
25 |
최소 |
최대 |
---|---|
GERMANY |
USA |
출력 코드:
SELECT
GREATEST_IGNORE_NULLS(10, 20, NULL, 40, 30) AS greatest,
LEAST_IGNORE_NULLS(10, 20, NULL, 40, 30) AS least,
GREATEST_IGNORE_NULLS(NULL, NULL, NULL) AS nulls;
SELECT
LEAST_IGNORE_NULLS(RTRIM('GERMANY'), RTRIM('USA')) AS LEAST,
GREATEST_IGNORE_NULLS(RTRIM('GERMANY'), RTRIM('USA')) AS GREATEST;
최대 |
최소 |
nulls |
---|---|---|
40 |
10 |
NULL |
최소 |
최대 |
---|---|
GERMANY |
USA |
Known Issues¶
알려진 문제 없음
관련 EWIs¶
NULLIF¶
설명 ¶
NULLIF 식은 두 인자를 비교하여 인자가 같으면 null을 반환합니다. 둘이 같지 않으면 첫 번째 인자가 반환됩니다. Redshift에서 NULLIF 는 특정 시나리오에서 문자열 값을 비교할 때 후행 공백을 무시합니다. 따라서 동작이 Redshift와 Snowflake 간에 다를 수 있습니다. 이러한 이유로 변환에서 Redshift와 Snowflake 사이의 동등성을 얻기 위해 RTRIM 이 추가됩니다. (Redshift SQL Language Reference NULLIF 함수)
문법 구문 ¶
NULLIF ( expression1, expression2 )
이 함수는 Snowflake 에서 완전하게 지원됩니다.
Sample Source Patterns
Input Code:
SELECT NULLIF('first', 'second') AS different, NULLIF('first', 'first') AS same;
different |
same |
---|---|
first |
NULL |
출력 코드:
SELECT NULLIF(RTRIM('first'), RTRIM('second')) AS different, NULLIF(RTRIM('first'), RTRIM('first')) AS same;
different |
same |
---|---|
first |
NULL |
Known Issues
알려진 문제는 없습니다.
Related EWIs
알려진 EWIs 가 없습니다.
NVL
Description
일련의 식에서 null이 아닌 첫 번째 식의 값을 반환합니다. Null이 아닌 값이 발견되면 목록의 나머지 식은 평가되지 않습니다. (Redshift SQL Language Reference NVL 함수)
RedShift 에서 NVL 은 2개 이상의 인자를 포함할 수 있지만, Snowflake NVL 함수는 2개의 인자만 허용합니다. 동일한 동작을 에뮬레이션하기 위해 인자가 3개 이상인 NVL 을 COALESCE 함수로 변환합니다.
이 함수는 Snowflake 에서 완전하게 지원됩니다.
문법 구문 ¶
NVL( expression, expression, ... )
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15),
phone_region_3 VARCHAR(15));
INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2, phone_region_3)
VALUES(1, 'Company_ABC', NULL, '555-01111', NULL),
(2, 'Company_DEF', '555-01222', NULL, NULL),
(3, 'Company_HIJ', '555-01333', '555-01444', NULL),
(4, 'Company_KLM', NULL, NULL, NULL);
SELECT NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
NVL(phone_region_2, phone_region_1) IF_REGION_2_NULL,
NVL(phone_region_2, phone_region_1, phone_region_3) THREE_ARG_NVL
FROM suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
IF_REGION_3_NULL |
---|---|---|
555-01111 |
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
555-01444 |
Null |
Null |
Null |
출력 코드:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15),
phone_region_3 VARCHAR(15))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/26/2024", "domain": "test" }}';
INSERT INTO suppliers (supplier_id, supplier_name, phone_region_1, phone_region_2, phone_region_3)
VALUES(1, 'Company_ABC', NULL, '555-01111', NULL),
(2, 'Company_DEF', '555-01222', NULL, NULL),
(3, 'Company_HIJ', '555-01333', '555-01444', NULL),
(4, 'Company_KLM', NULL, NULL, NULL);
SELECT NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
NVL(phone_region_2, phone_region_1) IF_REGION_2_NULL,
COALESCE(phone_region_2, phone_region_1, phone_region_3) THREE_ARG_NVL
FROM
suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
|
---|---|---|
555-01111 |
555-01111 |
|
555-01222 |
555-01222 |
|
555-01333 |
555-01444 |
|
Null |
Null |
Known Issues¶
알려진 문제는 없습니다.
관련 EWIs¶
알려진 문제는 없습니다.
날짜 및 시간 함수¶
CONVERT_TIMEZONE¶
설명¶
Amazon Redshift의 CONVERT_TIMEZONE
함수는 원래 타임존, 대상 타임존, 변환할 타임스탬프를 지정하여 한 타임존에서 다른 타임존으로 타임스탬프를 변환하는 함수입니다. 여러 리전에서 시간을 정확하게 관리하는 데 유용합니다
문법 구문¶
CONVERT_TIMEZONE(source_timezone, target_timezone, timestamp)
샘플 소스 패턴¶
입력 코드:¶
SELECT
GETDATE(),
CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE()) AS london_time,
CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', GETDATE()) AS tokyo_time;
getdate |
london_time |
tokyo_time |
---|---|---|
2024-10-02 16:14:55.000000 |
2024-10-02 17:14:55.000000 |
2024-10-03 01:14:55.000000 |
출력 코드:¶
SELECT
GETDATE(),
CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE()) AS london_time,
CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', GETDATE()) AS tokyo_time;
getdate |
london_time |
tokyo_time |
---|---|---|
2024-10-02 09:18:43.848 |
2024-10-02 10:17:35.351 |
2024-10-02 18:17:35.351 |
관련 EWIs¶
알려진 문제는 없습니다.
CURRENT_DATE¶
설명¶
CURRENT_DATE 는 현재 세션 타임존(기본값 UTC)의 날짜를 기본 형식 YYYY-MM-DD 로 반환합니다. (RedShift SQL Language Reference CURRENT_DATE)
문법 구문¶
CURRENT_DATE
샘플 소스 패턴¶
입력 코드:¶
SELECT CURRENT_DATE;
DATE |
---|
2024-09-22 |
출력 코드:¶
SELECT
CURRENT_DATE();
DATE_T |
---|
2024-09-22 |
권장 사항¶
권장 사항이 없습니다.
관련 EWIs¶
알려진 문제는 없습니다.
DATE¶
설명¶
이 함수는 입력 식을 날짜로 변환합니다.
이 함수는 Snowflake 에서 완전히 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
Grammar Syntax
DATE(<expr>)
Sample Source Patterns
Input Code:
SELECT DATE('2024-02-02 04:05:06.789');
SELECT "DATE"("GETDATE"());
SELECT "date"('2024-02-02 04:05:06.789');
DATE(‘2024-02-02 04:05:06.789’) |
---|
2024-02-02 |
“DATE”(“GETDATE”()) |
---|
2024-11-20 |
“date”(‘2024-02-02 04:05:06.789’) |
---|
2024-02-02 |
Output Code:
SELECT DATE('2024-02-02 04:05:06.789');
SELECT DATE(GETDATE());
SELECT DATE('2024-02-02 04:05:06.789');
DATE(‘2024-02-02 04:05:06.789’) |
---|
2024-02-02 |
“DATE”(“GETDATE”()) |
---|
2024-11-20 |
“DATE”(‘2024-02-02 04:05:06.789’) |
---|
2024-02-02 |
Known Issues
문제가 발견되지 않았습니다.
Related EWIs
알려진 문제는 없습니다.
DATE_ADD
Description
Amazon Redshift의 DATE_ADD
함수는 날짜 또는 타임스탬프에 지정된 시간 간격을 추가합니다. 여기서 datetimepart
는 간격 유형(예: '일'
또는 '월'
), interval
은 추가할 단위 수(양수 또는 음수), timestamp
는 원래 날짜입니다.
DATE_ADD
는 DATEADD
로 변환되며, 이 변환에 대한 자세한 내용은 여기를 클릭하십시오.
DATE_ADD
에 대해 Snowflake에서 유효한 datepart
:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
week
month, months
quarter, quarters
year, years
Snowflake가 DATE_ADD
에 대해 지원하지 않는 형식:
weeks
decade, decades
century, centuries
millennium, millennia
Grammar Syntax
DATE_ADD( datetimepart, interval, timestamp )
Sample Source Patterns
Input Code:
SELECT DATE_ADD('day', 10, '2024-11-01'), DATE_ADD('month', 3, '2024-11-01');
SELECT "DATE_ADD"('DAYS',18,'2008-02-28');
date_add |
date_add |
---|---|
2024-11-11 00:00:00.000000 |
2025-02-01 00:00:00.000000 |
“date_add” |
---|
2008-03-17 00:00:00.000000 |
Output Code:
SELECT
DATEADD('day', 10, '2024-11-01'),
DATEADD('month', 3, '2024-11-01');
SELECT
DATEADD('DAYS',18,'2008-02-28');
DATEADD |
DATEADD |
---|---|
2024-11-11 00:00:00.000 |
2025-02-01 00:00:00.000 |
DATEADD |
---|
2008-03-17 00:00:00.000 |
Know Issues
문제가 발견되지 않았습니다.
Related EWIs
알려진 문제는 없습니다.
DATE_DIFF
Description
DATEDIFF 는 두 날짜 또는 시간 식의 날짜 부분 간의 차이를 반환합니다.
(RedShift SQL Language Reference DATEDIFF 함수)
DATE_DIFF
에 대해 Snowflake에서 유효한 datepart
:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
week
month, months
quarter, quarters
year, years
Snowflake가 DATEDIFF
에 대해 지원하지 않는 형식:
decade, decades
century, centuries
millennium, millennia
Grammar Syntax
DATE_DIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
이 함수는 Snowflake 에서 완전히 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
SELECT DATE_DIFF(year,'2009-01-01','2019-12-31') as year,
DATE_DIFF(month,'2009-01-01','2019-12-31') as month,
DATE_DIFF(day,'2009-01-01','2019-12-31') as day,
date_diff('year'::text, '2009-01-01 00:00:00'::timestamp without time zone, '2019-12-31 00:00:00'::timestamp without time zone) AS "year2";
SELECT DATE_DIFF(week,'2009-01-01','2019-12-31') as week,
DATE_DIFF(century,'1009-01-01','2009-12-31') as century,
DATE_DIFF(decade,'1009-01-01','2009-12-31') as decade;
연도 |
월 |
일 |
year2 |
---|---|---|---|
10 |
131 |
4016 |
10 |
week |
century |
decade |
---|---|---|
574 |
10 |
100 |
출력 코드:¶
SELECT
DATEDIFF(year, '2009-01-01', '2019-12-31') as year,
DATEDIFF(month, '2009-01-01', '2019-12-31') as month,
DATEDIFF(day, '2009-01-01', '2019-12-31') as day,
DATEDIFF(year, '2009-01-01 00:00:00':: TIMESTAMP_NTZ, '2019-12-31 00:00:00':: TIMESTAMP_NTZ) AS year2;
SELECT
DATEDIFF(week,'2009-01-01','2019-12-31') as week,
DATEDIFF(YEAR, '1009-01-01', '2009-12-31') / 100 as century,
DATEDIFF(YEAR, '1009-01-01', '2009-12-31') / 10 as decade;
연도 |
월 |
일 |
year2 |
---|---|---|---|
10 |
131 |
4016 |
10 |
week |
century |
decade |
---|---|---|
574 |
10 |
100 |
문제 파악¶
문제가 발견되지 않았습니다.
관련 EWIs¶
알려진 문제는 없습니다.
DATE_PART¶
설명 ¶
DATE_PART 식에서 날짜 부분 값을 추출합니다. DATE_PART 는 PGDATE_PART 함수의 동의어입니다.
(RedShift SQL Language Reference DATE_PART 함수)
DATE_PART
에 대해 Snowflake에서 유효한 datepart
:
second, seconds
minute, minutes
hour, hours
day, days
week
dayofweek
dayofyear
month, months
quarter, quarters
year, years
epoch
DATE_PART
에 대한 Snowflake의 잘못된 형식이 있습니다.
microsecond, microseconds
millisecond, milliseconds
weeks
decade, decades
century, centuries
millennium, millennia
문법 구문 ¶
{PGDATE_PART | DATE_PART}(datepart, {date|timestamp})
경고
이 함수는 Snowflake 에서 부분적으로 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
SELECT DATE_PART(minute, timestamp '2023-01-04 04:05:06.789') AS dateMinute,
PGDATE_PART(dayofweek, timestamp '2022-05-02 04:05:06.789') AS dateDayofweek,
"DATE_PART"('month', date '2022-05-02') AS dateMonth,
pgdate_part('weeks'::text, '2023-02-28'::date::timestamp without time zone) AS wks;
SELECT DATE_PART(weeks, date '2023-02-28') AS wks,
DATE_PART(decade, date '2023-02-28') AS dec,
PGDATE_PART(century, date '2023-02-28') AS cen;
dateMinute |
dateDayofweek |
dateMonth |
wks |
---|---|---|---|
5 |
1 |
5 |
9 |
출력 코드:¶
SELECT
DATE_PART(minute, timestamp '2023-01-04 04:05:06.789') AS dateMinute,
DATE_PART(dayofweek, timestamp '2022-05-02 04:05:06.789') AS dateDayofweek,
DATE_PART('month', date '2022-05-02') AS dateMonth,
DATE_PART(week, '2023-02-28'::date:: TIMESTAMP_NTZ) AS wks;
SELECT
DATE_PART(week, date '2023-02-28') AS wks,
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - decade FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
DATE_PART(decade, date '2023-02-28') AS dec,
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - century FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
DATE_PART(century, date '2023-02-28') AS cen;
dateMinute |
dateDayofweek |
dateMonth |
wks |
---|---|---|---|
5 |
1 |
5 |
9 |
문제 파악¶
문제가 발견되지 않았습니다.
관련 EWIs¶
SSC-EWI-PGOOO5: 현재 날짜/숫자 형식은 Snowflake에서 다른 동작을 할 수 있습니다.
DATE_TRUNC¶
설명¶
DATE_TRUNC 함수는 시간, 일, 월 등 지정한 날짜 부분을 기준으로 타임스탬프 식 또는 리터럴을 잘라냅니다.
(Redshift SQL Language Reference DATE_TRUNC 함수).
Snowflake 에서 이 함수는 DATE, TIME 또는 TIMESTAMP 값을 지정된 전체 자릿수로 잘라냅니다.
Snowflake에서 유효한 <datepart> :
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
week
month, months
quarter, quarters
year, years
Snowflake에 잘못된 형식이 있습니다.
주
decade, decades
century, centuries
millennium, millennia
이 함수는 Snowflake 에서 완전히 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
Grammar Syntax
DATE_TRUNC('datepart', timestamp)
Sample Source Patterns
지원되는 날짜 부분
Input Code:
SELECT
DATE_TRUNC('second', TIMESTAMP '2024-02-02 04:05:06.789') AS sec,
DATE_TRUNC('hours', TIMESTAMP '2024-02-02 04:05:06.789') AS hrs,
DATE_TRUNC('week', TIMESTAMP '2024-02-02 04:05:06.789') AS wk,
"DATE_TRUNC"('month', TIMESTAMP '2024-02-02 04:05:06.789') AS mth,
"date_trunc"('quarters', TIMESTAMP '2024-02-02 04:05:06.789') AS qtr,
date_trunc('second'::text, '2024-02-02 04:05:06.789'::timestamp without time zone) AS sec2;
SEC | HRS | WK | MTH | QTR | SEC2 |
---|---|---|---|---|---|
2024-02-02 04:05:06.000000 | 2024-02-02 04:00:00.000000 | 2024-01-29 00:00:00.000000 | 2024-02-01 00:00:00.000000 | 2024-01-01 00:00:00.000000 | 2024-02-02 04:05:06.000000 |
Output Code:
SELECT
DATE_TRUNC('second', TIMESTAMP '2024-02-02 04:05:06.789') AS sec,
DATE_TRUNC('hours', TIMESTAMP '2024-02-02 04:05:06.789') AS hrs,
DATE_TRUNC('week', TIMESTAMP '2024-02-02 04:05:06.789') AS wk,
DATE_TRUNC('month', TIMESTAMP '2024-02-02 04:05:06.789') AS mth,
DATE_TRUNC('quarters', TIMESTAMP '2024-02-02 04:05:06.789') AS qtr,
date_trunc('second','2024-02-02 04:05:06.789':: TIMESTAMP_NTZ) AS sec2;
SEC | HRS | WK | MTH | QTR | SEC2 |
---|---|---|---|---|---|
2024-02-02 04:05:06.000 | 2024-02-02 04:00:00.000 | 2024-01-29 00:00:00.000 | 2024-02-01 00:00:00.000 | 2024-01-01 00:00:00.000 | 2024-02-02 04:05:06.000000 |
잘못된 날짜 부분
이 변환은 다음 날짜 부분에 대한 Redshift 동작을 에뮬레이션하기 위해 수행됩니다
decade, decades
century, centuries
millennium, millennia
Input Code:
SELECT
DATE_TRUNC('weeks', TIMESTAMP '1990-02-02 04:05:06.789') AS wks,
DATE_TRUNC('decade', TIMESTAMP '1990-02-02 04:05:06.789') AS dec,
DATE_TRUNC('century', TIMESTAMP '1990-02-02 04:05:06.789') AS c,
DATE_TRUNC('millennium', TIMESTAMP '1990-02-02 04:05:06.789') AS m;
WKS |
DEC |
C |
M |
---|---|---|---|
1990-01-29 00:00:00.000000 |
1990-01-01 00:00:00.000000 |
1901-01-01 00:00:00.000000 |
1001-01-01 00:00:00.000000 |
Output Code:
SELECT
DATE_TRUNC(week, TIMESTAMP '1990-02-02 04:05:06.789') AS wks,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789')) % 10, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS dec,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789') - 1) % 100, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS c,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789') - 1) % 1000, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS m;
WKS |
DEC |
C |
M |
---|---|---|---|
1990-01-29 00:00:00.000 |
1990-01-01 00:00:00.000 |
1901-01-01 00:00:00.000 |
1001-01-01 00:00:00.000 |
자세한 내용은 Snowflake의 다음 설명서를 참조하십시오.
Known Issues
Amazon Redshift에서 타임스탬프의 기본 전체 자릿수는 6자리(마이크로초)이며, Snowflake에서는 기본 전체 자릿수가 9자리(나노초)입니다. 이러한 전체 자릿수의 차이로 인해 타임스탬프로 작업할 때는 특정 요구 사항을 고려하는 것이 중요합니다. 두 플랫폼에서 서로 다른 전체 자릿수가 요구되는 경우 다음 옵션을 사용할 수 있습니다.
ALTER SESSION 사용:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
DATE_TRUNC()로 얻은 값을 저장하는 데 사용되는 데이터 타입에 따라 전체 자릿수에 제한이 있어 정확도가 떨어질 수 있다는 점에 유의하십시오.
Related EWIs
알려진 문제는 없습니다.
DATEADD
Description
DATE, TIME, TIMETZ 또는 TIMESTAMP 값을 지정된 간격만큼 증가시킵니다.
(RedShift SQL Language Reference DATEADD 함수)
Amazon Redshift의 DATEADD
함수는 날짜 또는 타임스탬프에 지정된 시간 간격을 추가합니다. 여기서 datepart
는 간격 유형(예:’일’ 또는 ‘월’), interval
은 추가할 단위 수(양수 또는 음수), date
는 원래 날짜입니다.
DATEADD
에 대해 Snowflake에서 유효한 datepart
:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
week
month, months
quarter, quarters
year, years
Snowflake가 DATEADD
에 대해 지원하지 않는 형식:
weeks
decade, decades
century, centuries
millennium, millennia
Grammar Syntax
DATEADD(datepart, interval, date)
Sample Source Patterns
지원되는 날짜 부분:
Input Code:
SELECT dateadd(year, 1, '2024-02-29') AS D1, dateadd(year, 1, '2023-02-28') AS D2
date_add('year'::text, 1::bigint, '2024-02-29 00:00:00'::timestamp without time zone) AS D3;
D1 |
D2 |
D3 |
---|---|---|
2025-03-01 00:00:00.000000 |
2024-02-28 00:00:00.000000 |
2025-03-01 00:00:00.000000 |
Output Code:
SELECT
DATEADD(day, 1, dateadd(year, 1, '2024-02-29')) AS D1,
DATEADD(year, 1, '2023-02-28') AS D2,
DATEADD('year', 1, '2024-02-29 00:00:00':: TIMESTAMP_NTZ) AS D3;
D1 |
D2 |
D3 |
---|---|---|
2025-03-01 00:00:00.000 |
2024-02-28 00:00:00.000 |
2025-03-01 00:00:00.000000 |
지원되지 않는 날짜 부분
이 변환은 다음 날짜 부분에 대한 Redshift 동작을 에뮬레이션하기 위해 수행됩니다
주를 동등한 지원 날짜 부분인
week
로 변환합니다.
다음 날짜 부분은 years
의 동등 부분으로 변환됩니다.
decade, decades: 연도 곱하기 10으로 변환합니다.
century, centuries: 연도에 100을 곱한 값으로 변환합니다.
millennium, millennia: converted to year times one thousand.
Input Code:
SELECT DATEADD(weeks, 1, '2023-02-28') AS wks,
DATEADD(decade, 1, '2023-02-28') AS dec,
DATEADD(century, 1, '2023-02-28') AS cen,
DATEADD(millennium, 1, '2023-02-28') AS mill;
SELECT
DATEADD(millennium, num_interval, '2023-02-28') AS result
FROM (
SELECT 5 AS num_interval
);
wks |
dec |
cen |
mill |
---|---|---|---|
2023-03-07 00:00:00.000000 |
2033-02-28 00:00:00.000000 |
2123-02-28 00:00:00.000000 |
3023-02-28 00:00:00.000000 |
Output Code:
SELECT
DATEADD(week, 1, '2023-02-28') AS wks,
DATEADD(YEAR, 1 * 10, '2023-02-28') AS dec,
DATEADD(YEAR, 1 * 100, '2023-02-28') AS cen,
DATEADD(YEAR, 1 * 1000, '2023-02-28') AS mill;
SELECT
DATEADD(YEAR, num_interval * 1000, '2023-02-28') AS result
FROM (
SELECT 5 AS num_interval
);
wks |
dec |
cen |
mill |
---|---|---|---|
2023-03-07 00:00:00.000000 |
2033-02-28 00:00:00.000000 |
2123-02-28 00:00:00.000000 |
3023-02-28 00:00:00.000000 |
참고
Amazon Redshift에서 DATEADD
를 사용하여 윤년 2월 29일에 연도를 추가하면 다음 해는 윤년이 아니므로 다음 해 3월 1일로 이월됩니다. Redshift는 가장 가까운 유효한 날짜로 이동하여 날짜 산술을 처리합니다. 윤년이 아닌 해에는 2월 29일이 존재하지 않으므로 기본값은 3월 1일입니다. 예를 들어, 2020년 2월 29일에 1년을 더하면 2021년 3월 1일이 됩니다.
Related EWIs
알려진 문제는 없습니다.
DATEDIFF
Description
DATEDIFF 는 두 날짜 또는 시간 식의 날짜 부분 간의 차이를 반환합니다.
(RedShift SQL Language Reference DATEDIFF 함수)
DATEDIFF
에 대해 Snowflake에서 유효한 datepart
:
microsecond, microseconds
millisecond, milliseconds
second, seconds
minute, minutes
hour, hours
day, days
week
month, months
quarter, quarters
year, years
Snowflake가 DATEDIFF
에 대해 지원하지 않는 형식:
decade, decades
century, centuries
millennium, millennia
Grammar Syntax
DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
이 함수는 Snowflake 에서 완전히 지원됩니다.
샘플 소스 패턴¶
입력 코드:¶
SELECT DATEDIFF(year,'2009-01-01','2019-12-31') as year,
DATEDIFF(month,'2009-01-01','2019-12-31') as month,
DATEDIFF(day,'2009-01-01','2019-12-31') as day;
SELECT DATEDIFF(week,'2009-01-01','2019-12-31') as week,
DATEDIFF(century,'1009-01-01','2009-12-31') as century,
DATEDIFF(decade,'1009-01-01','2009-12-31') as decade;
연도 |
월 |
일 |
---|---|---|
10 |
131 |
4016 |
week |
century |
decade |
---|---|---|
574 |
10 |
100 |
출력 코드:¶
SELECT DATEDIFF(year,'2009-01-01','2019-12-31') as year,
DATEDIFF(month,'2009-01-01','2019-12-31') as month,
DATEDIFF(day,'2009-01-01','2019-12-31') as day;
SELECT DATEDIFF(week,'2009-01-01','2019-12-31') as week,
DATEDIFF(YEAR, '1009-01-01', '2009-12-31') / 100 as century,
DATEDIFF(YEAR, '1009-01-01', '2009-12-31') / 10 as decade;
연도 |
월 |
일 |
---|---|---|
10 |
131 |
4016 |
week |
century |
decade |
---|---|---|
574 |
10 |
100 |
문제 파악¶
문제가 발견되지 않았습니다.
관련 EWIs¶
알려진 문제는 없습니다.
GETDATE¶
설명¶
GETDATE 는 현재 세션 타임존의 현재 날짜와 시간을 반환합니다(기본값 UTC). 트랜잭션 블록 내에 있는 경우에도 현재 문의 시작 날짜 또는 시간을 반환합니다. (Redshift SQL Language Reference GETDATE 함수).
Snowflake 에서 이 함수는 현재 날짜와 시간을 나노초 단위의 전체 자릿수(최대 9자리)로 제공하며 시간대를 인식합니다.
이 함수는 Snowflake 에서 완전히 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
Grammar Syntax
GETDATE()
Sample Source Patterns
Input Code:
CREATE TABLE table1 (
id INTEGER,
date_t DATE DEFAULT getdate(),
time_t TIME DEFAULT "getdate"(),
timestamp_t TIMESTAMP DEFAULT "GETDATE"(),
timestamptz_t TIMESTAMPTZ DEFAULT getdate()
);
INSERT INTO table1(id) VALUES (1);
SELECT * FROM table1;
ID |
DATE_T |
TIME_T |
TIMESTAMP_T |
TIMESTAMPTZ_T |
---|---|---|---|---|
1 |
2024-11-20 |
17:51:00 |
2024-11-20 17:51:00.000000 |
2024-11-20 17:51:00.000000 +00:00 |
Output Code:
CREATE TABLE table1 (
id INTEGER,
date_t DATE DEFAULT getdate() :: DATE,
time_t TIME DEFAULT GETDATE() :: TIME,
timestamp_t TIMESTAMP DEFAULT GETDATE(),
timestamptz_t TIMESTAMP_TZ DEFAULT getdate()
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO table1 (id) VALUES (1);
SELECT * FROM
table1;
ID |
DATE_T |
TIME_T |
TIMESTAMP_T |
TIMESTAMPTZ_T |
---|---|---|---|---|
1 |
2024-11-20 |
17:51:00 |
2024-11-20 17:51:00.000 |
2024-11-20 17:51:00.000 +0000 |
Known Issues
Amazon Redshift에서 타임스탬프의 기본 전체 자릿수는 6자리(마이크로초)이며, Snowflake에서는 기본 전체 자릿수가 9자리(나노초)입니다. 이러한 전체 자릿수의 차이로 인해 타임스탬프로 작업할 때는 특정 요구 사항을 고려하는 것이 중요합니다. 두 플랫폼에서 서로 다른 전체 자릿수가 요구되는 경우 다음 옵션을 사용할 수 있습니다.
ALTER SESSION 사용:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
GETDATE()로 얻은 값을 저장하는 데 사용되는 데이터 타입에 따라 전체 자릿수에 제한이 있어 정확도가 떨어질 수 있다는 점에 유의하십시오.
Related EWIs
알려진 문제는 없습니다.
TIMESTAMP
Description
TIMESTAMP 함수는 문자열 값을 타임스탬프로 형변환하는 시스템 함수입니다.
이 함수는 Snowflake 에서 완전히 지원됩니다.
문법 구문 ¶
select "timestamp"(VARCHAR);
샘플 소스 패턴¶
입력 코드:¶
select "timestamp"('2024-03-01 3:22:33');
“타임스탬프” |
---|
2024-03-01 03:22:33.000000 |
출력 코드:
select
TO_TIMESTAMP('2024-03-01 3:22:33');
TO_TIMESTAMP |
---|
2024-03-01 03:22:33.000 |
문제 파악¶
Amazon Redshift에서 타임스탬프의 기본 전체 자릿수는 6자리(마이크로초)이며, Snowflake에서는 기본 전체 자릿수가 9자리(나노초)입니다. 이러한 전체 자릿수의 차이로 인해 타임스탬프로 작업할 때는 특정 요구 사항을 고려하는 것이 중요합니다. 두 플랫폼에서 서로 다른 전체 자릿수가 요구되는 경우 다음 옵션을 사용할 수 있습니다.
ALTER SESSION 사용:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
GETDATE()로 얻은 값을 저장하는 데 사용되는 데이터 타입에 따라 전체 자릿수에 제한이 있어 정확도가 떨어질 수 있다는 점에 유의하십시오.
관련 EWIs¶
알려진 문제는 없습니다.
TRUNC¶
설명 ¶
TIMESTAMP
을 잘라내고 DATE
를 반환합니다.
자세한 내용은 TRUNC 함수를 참조하십시오.
문법 구문 ¶
TRUNC(timestamp)
참고
이 함수는 Snowflake 에서 지원됩니다. 그러나 Snowflake에서는 DATE, TIME 또는 TIMESTAMP 값을 지정된 전체 자릿수로 잘라냅니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE test_date_trunc (
mytimestamp TIMESTAMP,
mydate DATE,
mytimestamptz TIMESTAMPTZ
);
INSERT INTO test_date_trunc VALUES (
'2024-05-09 08:50:57.891 -0700',
'2024-05-09',
'2024-05-09 08:50:57.891 -0700');
SELECT TRUNC(mytimestamp) AS date1,
TRUNC(mydate) AS date2,
TRUNC(mytimestamptz::TIMESTAMP) AS date3,
TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP) AS date4,
TRUNC('2024-05-09 08:50:57.891 -0700'::DATE) AS date5,
CAST(TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP) AS TIMESTAMP) AS date6
FROM test_date_trunc;
DATE1 |
DATE2 |
DATE3 |
DATE4 |
DATE5 |
DATE6 |
---|---|---|---|---|---|
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 00:00:00.000 |
출력 코드:
CREATE TABLE test_date_trunc (
mytimestamp TIMESTAMP,
mydate DATE,
mytimestamptz TIMESTAMP_TZ
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/13/2024", "domain": "test" }}';
INSERT INTO test_date_trunc
VALUES (
'2024-05-09 08:50:57.891 -0700',
'2024-05-09',
'2024-05-09 08:50:57.891 -0700');
SELECT
DATE( TRUNC(mytimestamp, 'day')) AS date1,
DATE(
TRUNC(mydate, 'day')) AS date2,
DATE(
TRUNC(mytimestamptz::TIMESTAMP, 'day')) AS date3,
DATE(
TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP, 'day')) AS date4,
DATE(
TRUNC('2024-05-09 08:50:57.891 -0700'::DATE, 'day')) AS date5,
CAST(DATE(TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP, 'day')) AS TIMESTAMP) AS date6
FROM
test_date_trunc;
DATE1 |
DATE2 |
DATE3 |
DATE4 |
DATE5 |
DATE6 |
---|---|---|---|---|---|
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 00:00:00.000 |
관련 EWIs¶
알려진 문제는 없습니다.
윈도우 함수¶
AVG¶
설명¶
AVG 윈도우 함수는 입력 식 값의 평균(산술 평균)을 반환합니다.
(Redshift SQL Language Reference AVG 함수)
이 함수는 Snowflake 에서 완전히 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
Grammar Syntax
AVG ( [ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list
frame_clause ]
)
Sample Source Patterns
Setup data
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column SUPER
);
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column VARIANT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/27/2024", "domain": "test" }}';
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
Input Code:
SELECT
my_smallint_column,
AVG(my_integer_column) OVER (PARTITION BY my_smallint_column) AS avg_integer_column,
AVG(my_numeric_column) OVER () AS avg_numeric_column_all,
AVG(my_decimal_column) OVER (PARTITION BY my_smallint_column ORDER BY my_integer_column ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_avg_decimal_column
FROM
example_table
ORDER BY my_smallint_column
LIMIT 3;
my_smallint_column | avg_integer_column | avg_numeric_column_all | cumulative_avg_decimal_column |
---|---|---|---|
1 | 100 | 345 | 679 |
2 | 200 | 345 | 789 |
3 | 300 | 345 | 890 |
Output Code:
SELECT
my_smallint_column,
AVG(my_integer_column) OVER (PARTITION BY my_smallint_column) AS avg_integer_column,
AVG(my_numeric_column) OVER () AS avg_numeric_column_all,
AVG(my_decimal_column) OVER (PARTITION BY my_smallint_column ORDER BY my_integer_column ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_avg_decimal_column
FROM
example_table
ORDER BY my_smallint_column
LIMIT 3;
my_smallint_column | avg_integer_column | avg_numeric_column_all | cumulative_avg_decimal_column |
---|---|---|---|
1 | 100 | 345 | 679 |
2 | 200 | 345 | 789 |
3 | 300 | 345 | 890 |
Note
AVG 는 데이터 타입에 따라 반올림 및 형식이 다르게 동작할 수 있으며, 이로 인해 Redshift와 Snowflake를 비교할 때 전체 자릿수 또는 소수점 이하 자릿수가 달라질 수 있습니다.
Related EWIs
알려진 문제는 없습니다.
COUNT
Description
COUNT 윈도우 함수는 식에 정의된 행을 계산합니다.
(Redshift SQL Language Reference COUNT 함수)
이 함수는 Snowflake 에서 완전히 지원됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
문법 구문¶
COUNT ( * | [ ALL ] expression) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
샘플 소스 패턴¶
설정 데이터¶
CREATE TABLE sales_data (
sale_id INT,
product_id INT,
sale_date DATE,
amount DECIMAL(10, 2)
);
INSERT INTO sales_data (sale_id, product_id, sale_date, amount) VALUES
(1, 101, '2024-01-01', 200.00),
(2, 102, '2024-01-02', 150.00),
(3, 101, '2024-01-03', 300.00),
(4, 101, '2024-01-03', 250.00),
(5, 103, '2024-01-04', 450.00),
(6, 102, '2024-01-05', 100.00),
(7, 104, '2024-01-05', 500.00),
(8, 101, '2024-01-06', 350.00);
입력 코드:¶
SELECT
product_id,
COUNT(ALL amount) OVER (PARTITION BY product_id) AS count_all_amount,
"count"(*) OVER() AS total_sales,
"COUNT"(*) OVER (PARTITION BY product_id ORDER BY sale_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_count
FROM
sales_data
ORDER BY product_id;
PRODUCT_ID | COUNT_ALL_AMOUNT | TOTAL_SALES | CUMULATIVE_COUNT |
---|---|---|---|
101 | 4 | 8 | 1 |
101 | 4 | 8 | 2 |
101 | 4 | 8 | 3 |
101 | 4 | 8 | 4 |
102 | 2 | 8 | 1 |
102 | 2 | 8 | 2 |
103 | 1 | 8 | 1 |
104 | 1 | 8 | 1 |
출력 코드:¶
SELECT
product_id,
COUNT(ALL amount) OVER (PARTITION BY product_id) AS count_all_amount,
COUNT(*) OVER() AS total_sales,
COUNT(*) OVER (PARTITION BY product_id ORDER BY sale_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_count
FROM
sales_data
ORDER BY product_id;
PRODUCT_ID | COUNT_ALL_AMOUNT | TOTAL_SALES | CUMULATIVE_COUNT |
---|---|---|---|
101 | 4 | 8 | 1 |
101 | 4 | 8 | 2 |
101 | 4 | 8 | 3 |
101 | 4 | 8 | 4 |
102 | 2 | 8 | 1 |
102 | 2 | 8 | 2 |
103 | 1 | 8 | 1 |
104 | 1 | 8 | 1 |
알려진 문제 ¶
문제가 발견되지 않았습니다.
관련 EWIs¶
알려진 문제는 없습니다.
DENSE_RANK¶
설명 ¶
DENSE_RANK 윈도우 함수는 OVER 절의 ORDER BY 식에 따라 값 그룹에서 값의 순위를 결정합니다. DENSE_RANK 함수는 RANK 함수와 2개 이상의 행이 동점인 경우 순위 값의 시퀀스에 공백이 생기지 않는다는 한 가지 점이 다릅니다.
자세한 내용은 DENSE_RANK 함수를 참조하십시오.
문법 구문 ¶
DENSE_RANK() OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
참고
이 함수는 Snowflake에서 지원됩니다. 그러나 ORDER BY
절은 Snowflake 에서 필수입니다. 존재하지 않는 경우 완전한 동등성을 보장하기 위해 ORDER BY 1
이 추가됩니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
);
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT DENSE_RANK() OVER (ORDER BY bushels DESC) AS rank1,
DENSE_RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
DENSE_RANK() OVER () AS rank3,
DENSE_RANK() OVER (PARTITION BY state) AS rank4
FROM corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
4 |
2 |
1 |
1 |
출력 코드:
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT DENSE_RANK() OVER (ORDER BY bushels DESC) AS rank1,
DENSE_RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
DENSE_RANK()
OVER (
ORDER BY 1) AS rank3,
DENSE_RANK()
OVER (PARTITION BY state
ORDER BY 1) AS rank4
FROM
corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
4 |
2 |
1 |
1 |
관련 EWIs¶
알려진 문제는 없습니다.
LEAD¶
설명¶
LEAD 윈도우 함수는 파티션의 현재 행 아래(after) 지정된 오프셋에 있는 행의 값을 반환합니다.
(Redshift SQL Language Reference LEAD 윈도우 함수)
경고
이 함수는 Snowflake 에서 부분적으로 지원됩니다. Redshift에서 오프셋은 상수 정수 또는 정수로 평가되는 식이 될 수 있습니다. Snowflake에서는 상수만 가능하다는 제한이 있습니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
문법 구문¶
LEAD (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
샘플 소스 패턴¶
설정 데이터¶
CREATE TABLE sales (
sale_id INT,
customer_id INT,
sale_date DATE,
sale_amount DECIMAL(10, 2)
);
INSERT INTO sales (sale_id, customer_id, sale_date, sale_amount)
VALUES
(1, 301, '2024-01-01', 150.00),
(2, 301, '2024-01-02', NULL),
(3, 301, '2024-01-03', 250.00),
(4, 301, '2024-01-04', 350.00),
(5, 302, '2024-02-01', 100.00),
(6, 302, '2024-02-02', 200.00),
(7, 302, '2024-02-03', NULL),
(8, 302, '2024-02-04', 300.00);
입력 코드:¶
SELECT
LEAD(sale_amount) OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead,
LEAD(sale_amount, 2) RESPECT NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_respect_null,
LEAD(sale_amount, 1) IGNORE NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_ignore_nulls
FROM sales;
LEAD |
LEAD_RESPECT_NULL |
LEAD_IGNORE_NULLS |
---|---|---|
200.00 |
Null |
200.00 |
Null |
300.00 |
300.00 |
300.00 |
Null |
300.00 |
Null |
Null |
Null |
Null |
250.00 |
250.00 |
250.00 |
350.00 |
250.00 |
350.00 |
Null |
350.00 |
Null |
Null |
Null |
출력 코드:¶
SELECT
LEAD(sale_amount) OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead,
LEAD(sale_amount, 2) RESPECT NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_respect_null,
LEAD(sale_amount, 1) IGNORE NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_ignore_nulls
FROM sales;
LEAD |
LEAD_RESPECT_NULL |
LEAD_IGNORE_NULLS |
---|---|---|
200.00 |
Null |
200.00 |
Null |
300.00 |
300.00 |
300.00 |
Null |
300.00 |
Null |
Null |
Null |
Null |
250.00 |
250.00 |
250.00 |
350.00 |
250.00 |
350.00 |
Null |
350.00 |
Null |
Null |
Null |
알려진 문제 ¶
문제가 발견되지 않았습니다.
관련 EWIs¶
알려진 문제는 없습니다.
RANK¶
설명 ¶
RANK 윈도우 함수는 OVER 절의 ORDER BY 식을 기반으로 값 그룹에서 값의 순위를 결정합니다. 선택적 PARTITION BY 절이 있는 경우 각 행 그룹에 대해 순위가 재설정됩니다.
자세한 내용은 RANK 함수를 참조하십시오.
문법 구문 ¶
RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
참고
이 함수는 Snowflake에서 지원됩니다. 그러나 ORDER BY
절은 Snowflake 에서 필수입니다. 존재하지 않는 경우 완전한 동등성을 보장하기 위해 ORDER BY 1
이 추가됩니다.
샘플 소스 패턴¶
입력 코드:¶
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
);
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT RANK() OVER (ORDER BY bushels DESC) AS rank1,
RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
RANK() OVER () AS rank3,
RANK() OVER (PARTITION BY state) AS rank4
FROM corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
5 |
2 |
1 |
1 |
출력 코드:
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT RANK() OVER (ORDER BY bushels DESC) AS rank1,
RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
RANK()
OVER (
ORDER BY 1) AS rank3,
RANK()
OVER (PARTITION BY state
ORDER BY 1) AS rank4
FROM
corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
5 |
2 |
1 |
1 |
관련 EWIs¶
알려진 문제는 없습니다.
ROW_NUMBER¶
설명 ¶
ROW_NUMBER 윈도우 함수는 OVER 절의 ORDER BY 식에 따라 행 그룹 내에서 현재 행의 서수를 1부터 카운트하여 할당합니다. (RedShift SQL Language Reference ROW_NUMBER 윈도우 함수)
문법 구문 ¶
ROW_NUMBER() OVER(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
이 함수는 Snowflake 에서 완전히 지원됩니다.
ORDER BY
절은 Snowflake 에서 필수입니다. 존재하지 않는 경우 완전한 동등성을 보장하기 위해 ORDER BY 1
이 추가됩니다.
함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.
Sample Source Patterns
Setup data
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
);
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
Input Code:
SELECT ROW_NUMBER() OVER ( ORDER BY bushels DESC) AS row1,
ROW_NUMBER() OVER ( PARTITION BY state ORDER BY bushels DESC) AS row2,
ROW_NUMBER() OVER () AS row3,
ROW_NUMBER() OVER ( PARTITION BY state) AS row4
FROM corn_production;
ROW1 |
ROW2 |
ROW3 |
ROW4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
4 |
3 |
3 |
3 |
3 |
1 |
4 |
1 |
5 |
2 |
5 |
2 |
출력 코드:
SELECT ROW_NUMBER() OVER ( ORDER BY bushels DESC) AS row1,
ROW_NUMBER() OVER ( PARTITION BY state ORDER BY bushels DESC) AS row2,
ROW_NUMBER()
OVER (
ORDER BY
1) AS row3,
ROW_NUMBER()
OVER ( PARTITION BY state
ORDER BY
1) AS row4
FROM
corn_production;
ROW1 |
ROW2 |
ROW3 |
ROW4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
4 |
3 |
3 |
3 |
3 |
1 |
4 |
1 |
5 |
2 |
5 |
2 |
Known Issues
문제가 발견되지 않았습니다.
Related EWIs
알려진 문제는 없습니다.