SnowConvert: Redshift 함수

시스템 함수

IDENTITY

설명

IDENTITY 함수는 테이블의 지정된 열에서 작업을 수행하여 ID의 초기 값을 결정하는 시스템 함수입니다. 초기값을 사용할 수 없는 경우 기본값은 함수에 제공된 값으로 설정됩니다. 이것은 Snowflake의 시퀀스로 변환됩니다.

문법 구문

 "identity"(oid_id, oid_table_id, default)
Copy

참고

이 함수는 더 이상 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;
Copy

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;
Copy

id

inventory_combo

1

5

2

8

3

11

3

14

문자열 함수

BTRIM

설명

BTRIM 함수는 선행 및 후행 공백을 제거하거나 선택적으로 지정된 문자열과 일치하는 선행 및 후행 문자를 제거하여 문자열을 다듬습니다. (RedShiftSQL Language Reference BTRIM 함수)

문법 구문

 BTRIM(string [, trim_chars ] )
Copy

이 함수는 Snowflake 에서 완전하게 지원됩니다.

Sample Source Patterns

Input Code:

 SELECT '     abc    ' AS untrim, btrim('     abc    ') AS trim;

SELECT 'setuphistorycassettes' AS untrim, btrim('setuphistorycassettes', 'tes') AS trim;
Copy

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;
Copy

utrim

trim

abc

abc

untrim

trim

setuphistorycassettes

uphistoryca

문제 파악

문제가 발견되지 않았습니다.

Related EWIs

알려진 문제는 없습니다.

CONCAT

Description

CONCAT 함수는 두 식을 연결하여 결과 식을 반환합니다. (RedShift SQL Language References CONCAT 함수) .

Grammar Syntax

 CONCAT ( expression1, expression2 )
Copy

이 함수는 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;
Copy
CONCAT(col1, ' TEST ')"CONCAT"(col1, ' TEST ')col1 || ' TEST '
name TESTname TESTname 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;
Copy
CONCAT(NAME, ' TEST ') "CONCAT"(NAME, ' TEST ')NAME || ' TEST '
name TESTname TESTname TEST

관련 EWIs

알려진 문제는 없습니다.

LEFT 및 RIGHT

설명

이 함수는 문자열에서 지정된 수의 가장 왼쪽 또는 가장 오른쪽 문자를 반환합니다. (SQL Language References LEFT 및 RIGHT 함수) .

문법 구문

 LEFT( string,  integer )

RIGHT( string,  integer )
Copy

이 함수는 Snowflake 에서 완전하게 지원됩니다.

Sample Source Patterns

Input Code:

 SELECT LEFT('Chicago', 3) AS left_3, RIGHT('Chicago', 3) AS right_3;
Copy

left_3

right_3

Chi

ago

출력 코드:

 SELECT LEFT('Chicago', 3) AS left_3, RIGHT('Chicago', 3) AS right_3;
Copy

left_3

right_3

Chi

ago

Know Issues

Snowflake와 Redshift에서 LEFTRIGHT 함수는 음수 값을 다르게 처리합니다.

  • Snowflake: 두 번째 인자가 음수일 때 빈 문자열을 반환합니다.

  • Redshift: 음수 값으로 런타임 오류를 발생시킵니다.

Related EWIs

알려진 문제는 없습니다.

LOWER

Description

LOWER 함수는 문자열을 소문자로 변환합니다. (RedShift SQL Language Reference 소문자 함수)

Grammar Syntax

 LOWER ( string )
Copy

이 함수는 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;
Copy
LOWER(COL1)"LOWER"(COL1)LOWER('vaLues')
testtestvalues
testtestvalues
testtestvalues

출력 코드:

 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;
Copy

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)
Copy

이 함수는 Snowflake 에서 완전하게 지원됩니다.

Sample Source Patterns

Input Code:

 SELECT 
    QUOTE_IDENT('"CAT"'),
    "QUOTE_IDENT"('Foo bar') ;
Copy

quote_ident

quote_ident

“””CAT”””

“Foo bar”””

출력 코드:

 SELECT
    CONCAT('"', REPLACE('"CAT"', '"', '""'), '"'),
    CONCAT('"', REPLACE('Foo bar', '"', '""'), '"');
Copy

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 ] ] ] )
Copy

경고

이 함수는 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;
Copy

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;
Copy

REGEXP_REPLACE

RESULT

the quick brown fox

100048 (2201B): 잘못된 정규식:’(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+’, 반복 연산자에 대한 인자 없음: ?

문제 파악

  1. 이 함수에는 사용자가 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)
Copy

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;
Copy

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;
Copy

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)
Copy

이 함수는 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;
Copy
split_1split_2split_3
defabc$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;
Copy
split_1split_2split_3
defabc$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 )
Copy

경고

이 함수는 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;
Copy

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;
Copy

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 )
Copy

이 함수는 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;
Copy

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;
Copy

SimpleTrim

dog

LeadingTrim

dog”

TrailingTrim

“dog

FromTrim

Hello World

Know Issues

문제가 발견되지 않았습니다.

Related EWIs

알려진 문제는 없습니다.

UPPER

Description

UPPER 함수는 문자열을 대문자로 변환합니다. (RedShift SQL Language Reference 대문자함수)

Grammar Syntax

 UPPER ( string )
Copy

이 함수는 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;
Copy
UPPER(COL1)"UPPER"(COL1)UPPER('vaLues')
TESTTESTVALUES
TESTTESTVALUES
TESTTESTVALUES

출력 코드:

 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;
Copy

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 )
Copy

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);
Copy
 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);
Copy
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;
Copy

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;
Copy

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 함수)

COUNTAPPROXIMATE COUNT COUNTAPPROX_COUNT_DISTINCT에 의해 Snowflake에서 완벽하게 지원됩니다.

함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.

문법 구문

 COUNT ( * | expression )

COUNT ( [ DISTINCT | ALL ] expression )

APPROXIMATE COUNT ( DISTINCT expression )
Copy

샘플 소스 패턴

설정 데이터

 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);
Copy
입력 코드:
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;
Copy
PRODUCT_IDTOTAL_SALESTOTAL_SALES_DISTINCTTOTAL_SALES_ALLTOTAL_SALES_ASTERISKAPRROXIMATE_COUNT_TOTAL_SALES
10165665
10233333
10322222
출력 코드:
 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;
Copy
PRODUCT_IDTOTAL_SALESTOTAL_SALES_DISTINCTTOTAL_SALES_ALLTOTAL_SALES_ASTERISKAPRROXIMATE_COUNT_TOTAL_SALES
10165665
10233333
10322222

알려진 문제

문제가 발견되지 않았습니다.

관련 EWIs

알려진 문제는 없습니다.

수학 함수

MAX

설명

MAX 함수는 행 세트의 최대값을 반환합니다. (RedShift SQL Language Reference MAX gkatn).

문법 구문

 MAX ( [ DISTINCT | ALL ] expression )
Copy

이 함수는 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;
Copy

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;
Copy

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 )
Copy

이 함수는 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;
Copy

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;
Copy

SUM(COL1)

SUM(DISTINCT COL1)

SUM(ALL COL1)

2

2

2

관련 EWIs

알려진 문제는 없습니다.

NUMERIC

설명

NUMERIC 함수는 문자열 값을 숫자 값으로 형변환하는 시스템 함수입니다.

이 함수는 Snowflake 에서 완전히 지원됩니다.

Grammar Syntax

 select "numeric"(VARCHAR);
Copy

Sample Source Patterns

Input Code:

 SELECT "numeric"('2024');
Copy

“숫자”

2024

출력 코드:

 SELECT
TO_NUMERIC('2024');
Copy

TO_NUMERIC

2024

Related EWIs

알려진 문제는 없습니다.

ROUND

Description

ROUND 함수는 숫자를 가장 가까운 정수 또는 소수로 반올림합니다. (RedShift SQL Language Reference ROUND 함수).

Grammar Syntax

 ROUND(number [ , integer ] )
Copy

이 함수는 Snowflake 에서 완전하게 지원됩니다.

샘플 소스 패턴

입력 코드:

 SELECT 28.05 AS score, ROUND(28.05) AS round_score;
SELECT 15.53969483712 AS comission, ROUND(15.53969483712, 2) AS round_comission;
Copy

점수

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;
Copy

점수

round_score

28.05

28

comission

round_comission

15.53969483712

15.54

관련 EWIs

알려진 문제는 없습니다.

SUM

설명

SUM 함수는 입력 열 또는 식 값의 합계를 반환합니다. (RedShift SQL Language Reference SUM 함수)

문법 구문

 SUM ( [ DISTINCT | ALL ] expression )
Copy

이 함수는 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;
Copy

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;
Copy

SUM(COL1)

SUM(DISTINCT COL1)

SUM(ALL COL1)

224

222

224

Related EWIs

알려진 문제는 없습니다.

TRUNC

Description

TRUNC 함수는 숫자를 이전 정수 또는 소수로 잘라냅니다.

자세한 내용은 TRUNC 함수를 참조하십시오.

Grammar Syntax

 TRUNC(number [ , integer ])
Copy

이 함수는 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;
Copy

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;
Copy

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])
Copy

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);
Copy

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);
Copy

to_date

to_date

to_date

2001-10-02

NULL

‘20010631’를 ‘YYYYMMDD’ 형식의 날짜로 구문 분석할 수 없습니다

Known Issues

  1. 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')
Copy

샘플 소스 패턴

입력 코드:

 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');
Copy

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');
Copy

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')

Copy

다음 테이블은 각 형식 요소의 Snowflake에 대한 매핑을 지정합니다.

Redshift

Snowflake

참고

BC, AD, bc, ad (대문자 및 소문자 시대 표시기)

PUBLIC.ERA_INDICATORS_UDF

B.C,. A.D., b.c., a.d. (마침표가 있는 대문자 및 소문자 시대 표시)

PUBLIC.ERA_INDICATORS_WITH_POINTS_UDF

CC

PUBLIC.CENTURY_UDF

YYYYYY

-

직접 지원

YYYY

PUBLIC.YEAR_PART_UDF

Y,YYY

PUBLIC.YEAR_WITH_COMMA_UDF

IYYY

YEAROFWEEKISO

I, IY, IYY

PUBLIC.ISO_YEAR_PART_UDF

Q

QUARTER

MONTH, Month, month

PUBLIC.FULL_MONTH_NAME_UDF

MON, Mon, mon

PUBLIC.MONTH_SHORT_UDF

RM, rm

PUBLIC.ROMAN_NUMERALS_MONTH_UDF

W

PUBLIC.WEEK_OF_MONTH_UDF

WW

PUBLIC.WEEK_NUMBER_UDF

IW

WEEKISO

DAY, Day, day

PUBLIC.DAYNAME_LONG_UDF

DY, Dy, dy

PUBLIC.DAYNAME_SHORT_UDF

DDD

DAYOFYEAR

IDDD

PUBLIC.DAY_OF_YEAR_ISO_UDF

D

PUBLIC.DAY_OF_WEEK_UDF

이 UDF 가 올바르게 작동하려면 Snowflake 세션 매개 변수 WEEK_START 가 기본값 (0)이어야 합니다

ID

DAYOFWEEKISO

J

PUBLIC.JULIAN_DAY_UDF

HH24

-

직접 지원

HH

HH12

HH12

-

직접 지원

MI

-

직접 지원

SS

-

직접 지원

MS

FF3

US

FF6

AM, PM, am, pm (대문자 및 소문자 자오선 표시기)

PUBLIC.MERIDIAN_INDICATORS_UDF

A.M., P.M., a.m., p.m. (마침표가 있는 대문자 및 소문자 자오선 표시)

PUBLIC.MERIDIAN_INDICATORS_WITH_POINTS_UDF

TZtz

UTCutc

redshift 설명서 에 따르면, 타임존이 있는 모든 타임스탬프는 UTC 로 저장되므로 이 형식 요소는 수정된 결과를 반환합니다

OF

+00

redshift 설명서 에 따르면, 타임존이 있는 모든 타임스탬프는 UTC 로 저장되므로 이 형식 요소는 수정된 결과를 반환합니다

SSSS

PUBLIC.SECONDS_PAST_MIDNIGHT

SP

이것은 “스펠 모드”에 대한 PostgreSQL 템플릿 패턴 수정자이지만 Redshift에서는 아무 작업도 수행하지 않으므로 출력에서 제거됩니다.

FX

이는 “수정된 형식”에 대한 또 다른 템플릿 패턴 수정자이지만, 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;
Copy
+----------------------+
|col1                  |
+----------------------+
|03/10/13 01:50:15.456 |
+----------------------+

Copy
Snowflake
 SELECT TO_CHAR('2013-10-03 13:50:15.456871'::TIMESTAMP, 'DD/MM/YY HH12:MI:SS.FF3') AS col1;
Copy
+----------------------+
|col1                  |
+----------------------+
|03/10/13 01:50:15.456 |
+----------------------+

Copy

함수를 사용한 형식 변환/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;
Copy
+-------------------------------------------------------------+
|result                                                       |
+-------------------------------------------------------------+
|Today is  July      SATURDAY  05, it belongs to the week  27 |
+-------------------------------------------------------------+

Copy
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;
Copy
+-------------------------------------------------------------+
|result                                                       |
+-------------------------------------------------------------+
|Today is  July      SATURDAY  05, it belongs to the week  27 |
+-------------------------------------------------------------+

Copy

인용된 텍스트

큰따옴표로 묶인 텍스트의 형식 요소는 해석하지 않고 바로 출력에 추가되며, 이스케이프된 큰따옴표는 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;
Copy
+-----------------+-------------------+-------------------+
|result1          |result2            |result3            |
+-----------------+-------------------+-------------------+
|01 TESTING DD 16 |01 TEST5NG "16" 16 |01 TESTING "DD" 16 |
+-----------------+-------------------+-------------------+

Copy
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;
Copy
+-----------------+-------------------+-------------------+
|result1          |result2            |result3            |
+-----------------+-------------------+-------------------+
|01 TESTING DD 16 |01 TEST5NG "16" 16 |01 TESTING "DD" 16 |
+-----------------+-------------------+-------------------+

Copy

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');
Copy

출력 코드:

 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. ***/!!!;
Copy

변수를 통해 전달된 형식 매개 변수

형식 매개 변수가 문자열 리터럴 대신 변수로 전달되면 형식 요소의 변환을 적용할 수 없으며, 함수 사용에 대한 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);
Copy

출력 코드:

 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);
Copy

관련 EWIs

  1. SSC-EWI-PG0005: 현재 날짜/숫자 형식은 Snowflake에서 다른 동작을 할 수 있습니다.

  2. 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 ] )
Copy

이 함수는 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
;
Copy

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
;
Copy

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;
Copy

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;
Copy

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])
Copy

샘플 소스 패턴

입력 코드:

 SELECT FNV_HASH('John Doe') as FNV_HASH,
       FNV_HASH('John Doe', 3) as FNV_HASH_SEED;
Copy

FNV_HASH

FNV_HASH_SEED

-1568545727084176168

-5484851035903916490

출력 코드:
 SELECT
       HASH('John Doe') as FNV_HASH,
       HASH('John Doe') as FNV_HASH_SEED;
Copy

FNV_HASH

FNV_HASH_SEED

3199932455444588441

3199932455444588441

참고

Redshift의 FNV_HASH 함수에서는 시드 매개 변수가 선택 사항이지만, FNV 알고리즘에서만 시드 매개 변수가 사용되기 때문에 Snowflake의 해시 함수에서는 시드 매개 변수가 사용되지 않습니다.

알려진 문제

알려진 문제는 없습니다.

관련 EWIs

알려진 문제는 없습니다.

조건부 함수

COALESCE

설명

일련의 식에서 null이 아닌 첫 번째 식의 값을 반환합니다. Null이 아닌 값이 발견되면 목록의 나머지 식은 평가되지 않습니다.

자세한 내용은 COALESCE 함수를 참조하십시오.

문법 구문

 COALESCE( expression, expression, ... )
Copy

이 함수는 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;
Copy

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;
Copy

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 [, ...])
Copy

이 함수는 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;
Copy

최대

최소

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;
Copy

최대

최소

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 )
Copy

이 함수는 Snowflake 에서 완전하게 지원됩니다.

Sample Source Patterns

Input Code:

 SELECT NULLIF('first', 'second') AS different, NULLIF('first', 'first') AS same;
Copy

different

same

first

NULL

출력 코드:

 SELECT NULLIF(RTRIM('first'), RTRIM('second')) AS different, NULLIF(RTRIM('first'), RTRIM('first')) AS same;
Copy

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, ... )
Copy

샘플 소스 패턴

입력 코드:

 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;
Copy

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;
Copy

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)
Copy

샘플 소스 패턴

입력 코드:

 SELECT
    GETDATE(),
    CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE()) AS london_time,
    CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', GETDATE()) AS tokyo_time;
Copy

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;
Copy

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
Copy

샘플 소스 패턴

입력 코드:

 SELECT CURRENT_DATE;
Copy

DATE

2024-09-22

출력 코드:
 SELECT
    CURRENT_DATE();
Copy

DATE_T

2024-09-22

권장 사항

권장 사항이 없습니다.

관련 EWIs

알려진 문제는 없습니다.

DATE

설명

이 함수는 입력 식을 날짜로 변환합니다.

이 함수는 Snowflake 에서 완전히 지원됩니다.

함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.

Grammar Syntax

 DATE(<expr>)
Copy

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');
Copy

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');
Copy

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_ADDDATEADD 로 변환되며, 이 변환에 대한 자세한 내용은 여기를 클릭하십시오.

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 )
Copy

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');
Copy

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');
Copy

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} )
Copy

이 함수는 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;
Copy

연도

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;
Copy

연도

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})
Copy

경고

이 함수는 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;
Copy

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;
Copy

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)
Copy

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;
Copy
SECHRSWKMTHQTRSEC2
2024-02-02 04:05:06.0000002024-02-02 04:00:00.0000002024-01-29 00:00:00.0000002024-02-01 00:00:00.0000002024-01-01 00:00:00.0000002024-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;
Copy
SECHRSWKMTHQTRSEC2
2024-02-02 04:05:06.0002024-02-02 04:00:00.0002024-01-29 00:00:00.0002024-02-01 00:00:00.0002024-01-01 00:00:00.0002024-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;
Copy

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;
Copy

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자리(나노초)입니다. 이러한 전체 자릿수의 차이로 인해 타임스탬프로 작업할 때는 특정 요구 사항을 고려하는 것이 중요합니다. 두 플랫폼에서 서로 다른 전체 자릿수가 요구되는 경우 다음 옵션을 사용할 수 있습니다.

  1. ALTER SESSION 사용:

     --This example is for 2 digits for precision (FF2).
    ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
    
Copy

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)
Copy

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;
Copy

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;
Copy

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
);
Copy

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
);
Copy

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} )
Copy

이 함수는 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;
Copy

연도

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;
Copy

연도

10

131

4016

week

century

decade

574

10

100

문제 파악

문제가 발견되지 않았습니다.

관련 EWIs

알려진 문제는 없습니다.

GETDATE

설명

GETDATE 는 현재 세션 타임존의 현재 날짜와 시간을 반환합니다(기본값 UTC). 트랜잭션 블록 내에 있는 경우에도 현재 문의 시작 날짜 또는 시간을 반환합니다. (Redshift SQL Language Reference GETDATE 함수).

Snowflake 에서 이 함수는 현재 날짜와 시간을 나노초 단위의 전체 자릿수(최대 9자리)로 제공하며 시간대를 인식합니다.

이 함수는 Snowflake 에서 완전히 지원됩니다.

함수의 따옴표로 묶인 식별자에 대한 자세한 내용은 여기를 클릭하십시오.

Grammar Syntax

 GETDATE()
Copy

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;
Copy

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;
Copy

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자리(나노초)입니다. 이러한 전체 자릿수의 차이로 인해 타임스탬프로 작업할 때는 특정 요구 사항을 고려하는 것이 중요합니다. 두 플랫폼에서 서로 다른 전체 자릿수가 요구되는 경우 다음 옵션을 사용할 수 있습니다.

  1. ALTER SESSION 사용:

     --This example is for 2 digits for precision (FF2).
    ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
    
Copy

GETDATE()로 얻은 값을 저장하는 데 사용되는 데이터 타입에 따라 전체 자릿수에 제한이 있어 정확도가 떨어질 수 있다는 점에 유의하십시오.

Related EWIs

알려진 문제는 없습니다.

TIMESTAMP

Description

TIMESTAMP 함수는 문자열 값을 타임스탬프로 형변환하는 시스템 함수입니다.

이 함수는 Snowflake 에서 완전히 지원됩니다.

문법 구문

 select "timestamp"(VARCHAR);
Copy

샘플 소스 패턴

입력 코드:

 select "timestamp"('2024-03-01 3:22:33');
Copy

“타임스탬프”

2024-03-01 03:22:33.000000

출력 코드:

 select
TO_TIMESTAMP('2024-03-01 3:22:33');
Copy

TO_TIMESTAMP

2024-03-01 03:22:33.000

문제 파악

Amazon Redshift에서 타임스탬프의 기본 전체 자릿수는 6자리(마이크로초)이며, Snowflake에서는 기본 전체 자릿수가 9자리(나노초)입니다. 이러한 전체 자릿수의 차이로 인해 타임스탬프로 작업할 때는 특정 요구 사항을 고려하는 것이 중요합니다. 두 플랫폼에서 서로 다른 전체 자릿수가 요구되는 경우 다음 옵션을 사용할 수 있습니다.

  1. ALTER SESSION 사용:

     --This example is for 2 digits for precision (FF2).
    ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
    
Copy

GETDATE()로 얻은 값을 저장하는 데 사용되는 데이터 타입에 따라 전체 자릿수에 제한이 있어 정확도가 떨어질 수 있다는 점에 유의하십시오.

관련 EWIs

알려진 문제는 없습니다.

TRUNC

설명

TIMESTAMP 을 잘라내고 DATE 를 반환합니다.

자세한 내용은 TRUNC 함수를 참조하십시오.

문법 구문

 TRUNC(timestamp)
Copy

참고

이 함수는 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;
Copy

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;
Copy

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 ]
)
Copy

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);
Copy
 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);
Copy
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;
Copy
my_smallint_columnavg_integer_columnavg_numeric_column_allcumulative_avg_decimal_column
1100345679
2200345789
3300345890
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;
Copy
my_smallint_columnavg_integer_columnavg_numeric_column_allcumulative_avg_decimal_column
1100345679
2200345789
3300345890

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 ]
)
Copy

샘플 소스 패턴

설정 데이터

 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);
Copy
입력 코드:
 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;
Copy
PRODUCT_IDCOUNT_ALL_AMOUNTTOTAL_SALESCUMULATIVE_COUNT
101481
101482
101483
101484
102281
102282
103181
104181
출력 코드:
 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;
Copy
PRODUCT_IDCOUNT_ALL_AMOUNTTOTAL_SALESCUMULATIVE_COUNT
101481
101482
101483
101484
102281
102282
103181
104181

알려진 문제

문제가 발견되지 않았습니다.

관련 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 ]
) 
Copy

참고

이 함수는 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;
Copy

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;
Copy

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 )
Copy

샘플 소스 패턴

설정 데이터

 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);
Copy
입력 코드:
 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;
Copy

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;
Copy

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 ]
) 
Copy

참고

이 함수는 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;
Copy

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;
Copy

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 ]
)
Copy

이 함수는 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);
Copy
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;
Copy

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;
Copy

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

알려진 문제는 없습니다.