SnowConvert: Funções do Redshift

Funções do sistema

IDENTITY

Descrição

A função IDENTITY é uma função do sistema que opera em uma coluna específica de uma tabela para determinar o valor inicial da identidade. Se o valor inicial não estiver disponível, o padrão será o valor fornecido na função. Isso será convertido em uma Sequência no Snowflake.

Sintaxe da gramática

 "identity"(oid_id, oid_table_id, default)
Copy

Nota

Essa função não é mais compatível com o Redshift. Ela usa o valor padrão para definir a identidade e se comporta como uma coluna de identidade padrão.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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

Funções de cadeia de caracteres

BTRIM

Descrição

A função BTRIM apara uma cadeia de caracteres removendo os espaços em branco à esquerda e à direita ou removendo os caracteres à esquerda e à direita que correspondem a uma cadeia de caracteres especificada opcional. (Função BTRIM de referência da linguagem RedShift SQL)

Sintaxe da gramática

 BTRIM(string [, trim_chars ] )
Copy

Essa função é totalmente suportada pelo 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

Código de saída:

 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

Problemas conhecidos

Não foram encontrados problemas.

Related EWIs

Não há problemas conhecidos.

CONCAT

Description

A função CONCAT concatena duas expressões e retorna a expressão resultante. (RedShift Função CONCAT de referência da linguagem SQL).

Grammar Syntax

 CONCAT ( expression1, expression2 )
Copy

Essa função é totalmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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 relacionados

Não há problemas conhecidos.

LEFT e RIGHT

Descrição

Essas funções retornam o número especificado de caracteres mais à esquerda ou mais à direita de uma cadeia de caracteres. (Funções LEFT e RIGHT de referência da linguagem SQL).

Sintaxe da gramática

 LEFT( string,  integer )

RIGHT( string,  integer )
Copy

Essa função é totalmente suportada pelo 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

Código de saída:

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

left_3

right_3

Chi

ago

Know Issues

No Snowflake e no Redshift, as funções LEFT e RIGHT tratam os valores negativos de forma diferente:

  • Snowflake: Retorna uma cadeia de caracteres vazia quando o segundo argumento é negativo.

  • Redshift: Gera um erro de tempo de execução com valores negativos.

Related EWIs

Não há problemas conhecidos.

LOWER

Description

A função LOWER converte uma cadeia de caracteres em minúsculas. (Função Lower de referência da linguagem RedShift SQL )

Grammar Syntax

 LOWER ( string )
Copy

Essa função é totalmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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

values

test

test

values

test

test

values

EWIs relacionados

Não há problemas conhecidos.

QUOTE_IDENT

Descrição

A função QUOTE_IDENT retorna a cadeia de caracteres especificada como uma cadeia de caracteres com aspas duplas à esquerda e aspas duplas à direita. (Função QUOTE_IDENT de referência da linguagem RedShift SQL).

Para replicar a funcionalidade dessa função, ela é convertida em uma função CONCAT.

Sintaxe da gramática

 QUOTE_IDENT(string)
Copy

Essa função é totalmente suportada pelo Snowflake.

Sample Source Patterns

Input Code:

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

quote_ident

quote_ident

«»»CAT»»»

«Foo bar»»»

Código de saída:

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

quote_ident

quote_ident

«»»CAT»»»

«Foo bar»»»

Problemas conhecidos

Não foram encontrados problemas.

Related EWIs

Não há problemas conhecidos.

REGEXP_REPLACE

Description

Essas funções procuram um padrão de expressão regular em uma cadeia de caracteres e substituem todas as ocorrências do padrão pela cadeia de caracteres especificada. (Função REGEXP_REPLACE de referência da linguagem SQL).

Grammar Syntax

 REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )
Copy

Aviso

Essa função é parcialmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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): Expressão regular inválida: “(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+”, nenhum argumento para o operador de repetição: ?

Problemas conhecidos

  1. Essa função inclui um argumento parameters que permite que o usuário interprete o padrão usando o dialeto Perl Compatible Regular Expression (PCRE), representado pelo valor p, que foi removido para evitar problemas ao corrigir o código.

EWIs relacionados

  • [SSC-EWI-0009](../../general/technical-documentation/issues-and-troubleshooting/conversion-issues/teradataEWI. md#ssc-ewi-td0020): Regexp_Substr A função suporta apenas expressões regulares POSIX.

  • SSC-FDM-0032: O parâmetro não é um valor literal, a transformação não pôde ser totalmente aplicada

  • SSC-FDM- PG0011: O uso da restrição de coluna COLLATE foi desativado para essa condição de correspondência de padrões.

REPLACE

Descrição

Substitui todas as ocorrências de um conjunto de caracteres em uma cadeia de caracteres existente por outros caracteres especificados. (Função REPLACE de referência da linguagem Redshift SQL).

Essa função é totalmente compatível com o Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

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

Código de saída:
 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

Não foram encontrados problemas.

Related EWIs

Não há problemas conhecidos.

SPLIT_PART

Description

Divide uma cadeia de caracteres no delimitador especificado e retorna a parte na posição especificada. (Função SPLIT_PART de referência da linguagem SQL).

Grammar Syntax

 SPLIT_PART(string, delimiter, position)
Copy

Essa função é totalmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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

Problemas conhecidos

Há uma diferença no comportamento de SPLIT_PART quando usado com agrupamentos sem distinção entre maiúsculas e minúsculas (CASE_INSENSITIVE ou en-ci) no Snowflake e no Redshift.

EWIs relacionados

Não há problemas conhecidos.

SUBSTRING

Descrição

Retorna o subconjunto de uma cadeia de caracteres com base na posição inicial especificada. (Função RedShift SUBSTRING).

Sintaxe da gramática

 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

Aviso

Essa função é parcialmente suportada no Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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

Problemas conhecidos

Quando a start_position no Redshift é 0 ou menos, a função SUBSTRING executa uma operação matemática (start_position + number_characters). Se o resultado for 0 ou menos, SUBSTRING retornará uma cadeia de caracteres vazia. No Snowflake, o comportamento para start_position quando é 0 ou menos é diferente, levando a resultados diferentes.

EWIs relacionados

Não há problemas conhecidos.

TRIM

Descrição

A função TRIM corta uma cadeia de caracteres com espaços em branco ou caracteres especificados. (Função TRIM de referência da linguagem RedShift SQL)

No Redshift, é possível especificar onde executar uma operação de corte usando palavras-chave (BOTH, LEADING ou TRAILING). Essa funcionalidade pode ser replicada no Snowflake usando as funções TRIM, LTRIM e RTRIM, respectivamente.

Sintaxe da gramática

 TRIM( [ BOTH | LEADING | TRAILING ] [trim_chars FROM ] string )
Copy

Essa função é totalmente suportada pelo 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

Código de saída:

 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

Não foram encontrados problemas.

Related EWIs

Não há problemas conhecidos.

UPPER

Description

A função UPPER converte uma cadeia de caracteres em maiúsculas. (Função Upper de referência da linguagem RedShift SQL)

Grammar Syntax

 UPPER ( string )
Copy

Essa função é totalmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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 relacionados

Não há problemas conhecidos.

Funções de agregação

AVG

Descrição

A função AVG retorna a média (média aritmética) dos valores da expressão de entrada. (Função AVG de referência da linguagem Redshift SQL)

Essa função é totalmente suportada pelo Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

Grammar Syntax

 AVG ( [ DISTINCT | ALL ] expression )
Copy

Sample Source Patterns

Dados de configuração

 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

Nota

AVG, dependendo do tipo de dados, pode se comportar de forma diferente em termos de arredondamento e formatação, o que pode resultar em precisão diferente ou casas decimais diferentes ao comparar o Redshift com o Snowflake.

Related EWIs

Não há problemas conhecidos.

COUNT

Description

A função COUNT conta as linhas definidas pela expressão. (Função COUNT de referência da linguagem Redshift SQL)

COUNT e APPROXIMATE COUNT são totalmente compatíveis com o Snowflake por COUNT e APPROX_COUNT_DISTINCT.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

Sintaxe da gramática

 COUNT ( * | expression )

COUNT ( [ DISTINCT | ALL ] expression )

APPROXIMATE COUNT ( DISTINCT expression )
Copy

Amostra de padrões da origem

Dados de configuração

 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
Código de entrada:
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
Código de saída:
 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

Problemas conhecidos

Não foram encontrados problemas.

EWIs relacionados

Não há problemas conhecidos.

Funções matemáticas

MAX

Descrição

A função MAX retorna o valor máximo em um conjunto de linhas. (Referência da linguagem RedShift SQL Função MAX).

Sintaxe da gramática

 MAX ( [ DISTINCT | ALL ] expression )
Copy

Essa função é totalmente suportada pelo 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

Código de saída:

 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

Não há problemas conhecidos.

MIN

Description

A função MIN retorna o valor mínimo em um conjunto de linhas (Referência da linguagem RedShift SQL Função MIN).

Grammar Syntax

 MIN ( [ DISTINCT | ALL ] expression )
Copy

Essa função é totalmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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 relacionados

Não há problemas conhecidos.

NUMERIC

Descrição

A função NUMERIC é uma função do sistema que converte um valor de cadeia de caracteres em um valor numérico.

Essa função é totalmente compatível com o Snowflake.

Grammar Syntax

 select "numeric"(VARCHAR);
Copy

Sample Source Patterns

Input Code:

 SELECT "numeric"('2024');
Copy

«numeric»

2024

Código de saída:

 SELECT
TO_NUMERIC('2024');
Copy

TO_NUMERIC

2024

Related EWIs

Não há problemas conhecidos.

ROUND

Description

A função ROUND arredonda os números para o número inteiro ou decimal mais próximo. (Função ROUND de referência da linguagem RedShift SQL).

Grammar Syntax

 ROUND(number [ , integer ] )
Copy

Essa função é totalmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

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

score

round_score

28,05

28

comission

round_comission

15.53969483712

15,54

Código de saída:

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

score

round_score

28,05

28

comission

round_comission

15.53969483712

15,54

EWIs relacionados

Não há problemas conhecidos.

SUM

Descrição

A função SUM retorna a soma dos valores da coluna ou da expressão de entrada. (RedShift SQL Função SUM de referência da linguagem)

Sintaxe da gramática

 SUM ( [ DISTINCT | ALL ] expression )
Copy

Essa função é totalmente suportada pelo 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

Código de saída:

 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

Não há problemas conhecidos.

TRUNC

Description

A função TRUNC trunca os números até o número inteiro ou decimal anterior.

Para obter mais informações, consulte a Função TRUNC.

Grammar Syntax

 TRUNC(number [ , integer ])
Copy

Essa função é totalmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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 relacionados

Não há problemas conhecidos.

Funções de formatação de tipos de dados

TO_DATE

Descrição

TO_DATE converte uma data representada por uma cadeia de caracteres em um tipo de dados DATE. (Função TO_DATE de referência da linguagem Redshift SQL)

Essa função é totalmente compatível com o Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

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: date/time field date value out of range: 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

Não é possível analisar “20010631” como data com o formato “YYYYMMDD”

Known Issues

  1. A consulta SELECT TO_DATE('20010631', 'YYYYMMDD') falha no Snowflake porque junho tem apenas 30 dias, e TO_DATE do Snowflake não ajusta automaticamente as datas inválidas, ao contrário do TO_DATE do Redshift com is_strict definido como false, o que o converteria para 1º de julho. Para evitar erros com cadeias de datas inválidas, você pode usar TRY_TO_DATE, que retorna NULL se a conversão falhar. Isso permite uma execução mais suave da consulta e uma identificação mais fácil de datas inválidas.

Related EWIs

  • SSC-FDM-RS0004: Datas inválidas causarão erros no Snowflake.

  • SSC-EWI-PG0005: O formato de data ou hora não é compatível com o Snowflake.

  • SSC-FDM-0032: O parâmetro não é um valor literal, a transformação não pôde ser totalmente aplicada

TO_CHAR

Description

TO_CHAR converte um carimbo de data/hora ou uma expressão numérica em um formato de dados de cadeia de caracteres. (Função TO_CHAR de referência da linguagem Redshift SQL)

Aviso

Essa função é parcialmente suportada no Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

Sintaxe da gramática

 TO_CHAR(timestamp_expression | numeric_expression , 'format')
Copy

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:
 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

Problemas conhecidos

Não foram encontrados problemas.

EWIs relacionados

  • SSC-EWI-PG0005: O formato de data/numérico atual pode ter um comportamento diferente no Snowflake.

Para valores de data e hora

Descrição

As cadeias de formato a seguir se aplicam a funções como TO_CHAR. Essas cadeias de caracteres podem conter separadores de data e hora (como “-”, “/ ou “:”) e os seguintes «dateparts» e «timeparts». (Página de referência das cadeias de caracteres de formato Datetime do Redshift)

Sintaxe da gramática

TO_CHAR (timestamp_expression, 'format')

Copy

A tabela a seguir especifica o mapeamento de cada elemento de formato para o Snowflake:

Redshift

Snowflake

Notas

BC, AD, bc, ad (indicadores de era em maiúsculas e minúsculas)

PUBLIC.ERA_INDICATORS_UDF

B.C.,. A.D., b.c., a.d. (indicadores de era maiúsculos e minúsculos com pontos)

PUBLIC.ERA_INDICATORS_WITH_POINTS_UDF

CC

PUBLIC.CENTURY_UDF

YYYY e YY

-

Com suporte direto

YYY e Y

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

Para que esse UDF funcione corretamente, o parâmetro de sessão do Snowflake WEEK_START deve ter seu valor padrão (0)

ID

DAYOFWEEKISO

J

PUBLIC.JULIAN_DAY_UDF

HH24

-

Com suporte direto

HH

HH12

HH12

-

Com suporte direto

MI

-

Com suporte direto

SS

-

Com suporte direto

MS

FF3

US

FF6

AM, PM, am, pm (indicadores de meridianos em letras maiúsculas e minúsculas)

PUBLIC.MERIDIAN_INDICATORS_UDF

A.M., P.M., a.m., p.m. (indicadores de meridianos maiúsculos e minúsculos com pontos)

PUBLIC.MERIDIAN_INDICATORS_WITH_POINTS_UDF

TZ e tz

UTC e utc

De acordo com a documentação do redshift, todos os carimbos de data/hora com fuso horário são armazenados em UTC, o que faz com que esse elemento de formato retorne um resultado fixo

OF

+00

De acordo com a documentação do redshift, todos os carimbos de data/hora com fuso horário são armazenados em UTC, o que faz com que esse elemento de formato retorne um resultado fixo

SSSS

PUBLIC.SECONDS_PAST_MIDNIGHT

SP

Esse é um modificador de padrão de modelo PostgreSQL para «modo de feitiço», mas não faz nada no Redshift, portanto, é removido da saída.

FX

Esse é outro modificador de padrão de modelo para «formato fixo»; no entanto, ele não tem uso na função TO_CHAR, portanto, foi removido.

Amostra de padrões da origem

Transformação direta de elementos de formato (sem funções/UDFs)

O resultado é preservado como uma única função 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

Transformação de formato usando funções/UDFs

O resultado é uma concatenação de várias funções internas TO_CHAR, UDFs e Snowflake que geram a representação de cadeia de caracteres equivalente do valor datetime

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

Texto citado

Os elementos de formato no texto entre aspas duplas são adicionados à saída diretamente sem interpretá-los; as aspas duplas com escape são transformadas em seu equivalente com escape no 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

Problemas conhecidos

Modificadores de padrão de modelo não suportados

Os seguintes modificadores de modelo de formato:

  • FM (modo de preenchimento)

  • TH e th (sufixo de número ordinal em maiúsculas e minúsculas)

  • TM (modo de conversão)

Não são suportados, incluí-los em um formato gerará SSC-EWI-PG0005

Código de entrada:

 SELECT TO_CHAR(CURRENT_DATE, 'FMMonth'),
TO_CHAR(CURRENT_DATE, 'DDTH'),
TO_CHAR(CURRENT_DATE, 'DDth'),
TO_CHAR(CURRENT_DATE, 'TMMonth');
Copy

Código de saída:

 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

Parâmetro de formato passado pela variável

Quando o parâmetro de formato é passado como uma variável em vez de um literal de cadeia de caracteres, a transformação de elementos de formato não pode ser aplicada; um FDM será adicionado aos usos da função alertando sobre isso.

Código de entrada:

 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

Código de saída:

 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 relacionados

  1. SSC-EWI-PG0005: O formato de data/numérico atual pode ter um comportamento diferente no Snowflake.

  2. SSC-FDM-0032: O parâmetro não é um valor literal, a transformação não pôde ser totalmente aplicada

Funções JSON

JSON_EXTRACT_PATH_TEXT

Descrição

A função JSON_EXTRACT_PATH_TEXT retorna o valor do par chave-valor referenciado por uma série de elementos de caminho em uma cadeia de caracteres JSON. (RedShift SQL Função _EXTRACT_PATH_TEXT de referência da linguagem JSON)

Sintaxe da gramática

 JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, ] ]              [, null_if_invalid ] )
Copy

Essa função é totalmente suportada pelo 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

Código de saída:

 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

Código de entrada usando variáveis como caminhos:
 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

result

appliances

brand

Any Brand

Código de saída:

 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

result

appliances

brand

Any Brand

Known Issues

  • O Redshift trata caracteres diferentes quando eles são newline, tabulação e carriage em comparação com o Snowflake. O Redshift interpreta os caracteres como os próprios caracteres. O Snowflake o aplica.

  • A função Snowflake recebe dois parâmetros: o primeiro é o literal JSON, e o segundo é o caminho separado por um ponto para acessar os objetos internos. A transformação substitui a lista de caminhos em uma função que unirá os caminhos separados por pontos, mesmo que seja uma referência de coluna.

  • Quando o caminho é enviado por meio de uma variável e a variável contém espaços, ela deve ser colocada entre aspas.

Related EWIs

Não foram encontrados problemas.

Funções de hash

FNV_HASH

Description

FNV_HASH Calcula a função hash não criptográfica de 64 bits FNV-1a para todos os tipos de dados básicos.\ (Função FNV_HASH de referência da linguagem Redshift SQL).

Nota

No Snowflake, não há função equivalente que forneça o algoritmo FNV, mas a HASH fornece a mesma funcionalidade não criptográfica.

Sintaxe da gramática

 FNV_HASH(value [, seed])
Copy

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:
 SELECT
       HASH('John Doe') as FNV_HASH,
       HASH('John Doe') as FNV_HASH_SEED;
Copy

FNV_HASH

FNV_HASH_SEED

3199932455444588441

3199932455444588441

Nota

Na função FNV_HASH do Redshift, o parâmetro seed é opcional, mas não é usado na função Hash do Snowflake, pois o parâmetro seed é usado somente no algoritmo FNV.

Problemas conhecidos

Não há problemas conhecidos.

EWIs relacionados

Não há problemas conhecidos.

Funções condicionais

COALESCE

Descrição

Retorna o valor da primeira expressão que não é nula em uma série de expressões. Quando um valor não nulo é encontrado, as expressões restantes da lista não são avaliadas.

Para obter mais informações, consulte a Função COALESCE.

Sintaxe da gramática

 COALESCE( expression, expression, ... )
Copy

Essa função é totalmente suportada pelo 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

nulo

nulo

Código de saída:

 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

nulo

nulo

Related EWIs

Não há problemas conhecidos.

GREATEST e LEAST

Description

Retorna o maior ou o menor valor de uma lista de qualquer número de expressões. (Função GREATEST e LEAST de referência da linguagem Redshift SQL)

Grammar Syntax

 GREATEST (value [, ...])
LEAST (value [, ...])
Copy

Essa função é totalmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

greatest

least

nulls

40

10

25

least

greatest

GERMANY

USA

Código de saída:

 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

greatest

least

nulls

40

10

NULL

least

greatest

GERMANY

USA

Problemas conhecidos

Não há problemas conhecidos

EWIs relacionados

NULLIF

Descrição

A expressão NULLIF compara dois argumentos e retorna null se os argumentos forem iguais. Se eles não forem iguais, o primeiro argumento será retornado. No Redshift, NULLIF ignora os espaços em branco à direita ao comparar valores de cadeia de caracteres em determinados cenários. Como resultado, o comportamento pode ser diferente entre o Redshift e o Snowflake. Por esse motivo, na transformação RTRIM será adicionado para obter a equivalência entre o Redshift e o Snowflake (Função NULLIF de referência da linguagem Redshift SQL)

Sintaxe da gramática

 NULLIF ( expression1, expression2 )
Copy

Essa função é totalmente suportada pelo Snowflake.

Sample Source Patterns

Input Code:

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

different

same

first

NULL

Código de saída:

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

different

same

first

NULL

Known Issues

Não há problemas conhecidos.

Related EWIs

Não há EWIs conhecidos.

NVL

Description

Retorna o valor da primeira expressão que não é nula em uma série de expressões. Quando um valor não nulo é encontrado, as expressões restantes na lista não são avaliadas. (Referência da linguagem Redshift SQL Função NVL)

No RedShift, NVL pode conter 2 ou mais argumentos, enquanto no Snowflake a função NVL aceita apenas 2 argumentos. Para emular o mesmo comportamento, NVL com 3 ou mais argumentos é transformado na função COALESCE.

Essa função é totalmente suportada pelo Snowflake.

Sintaxe da gramática

 NVL( expression, expression, ... )
Copy

Amostra de padrões da origem

Código de entrada:

 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

nulo

nulo

nulo

Código de saída:

 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

nulo

nulo

Problemas conhecidos

Não há problemas conhecidos.

EWIs relacionados

Não há problemas conhecidos.

Funções de data e hora

CONVERT_TIMEZONE

Descrição

A função CONVERT_TIMEZONE no Amazon Redshift converte um carimbo de data/hora de um fuso horário para outro, onde você especifica o fuso horário original, o fuso horário de destino e o carimbo de data/hora a ser convertido. Tornando-o útil para gerenciar o tempo com precisão em diferentes regiões

Sintaxe da gramática

 CONVERT_TIMEZONE(source_timezone, target_timezone, timestamp)
Copy

Amostra de padrões da origem

Código de entrada:

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

getdate

londres_time

tokyo_time

2024-10-02 16:14:55.000000

2024-10-02 17:14:55.000000

2024-10-03 01:14:55.000000

Código de saída:
 SELECT
    GETDATE(),
    CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE()) AS london_time,
    CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', GETDATE()) AS tokyo_time;
Copy

getdate

londres_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 relacionados

Não há problemas conhecidos.

CURRENT_DATE

Descrição

CURRENT_DATE retorna uma data no fuso horário da sessão atual (UTC por padrão) no formato padrão: YYYY-MM-DD. (Função CURRENT_DATE de referência da linguagem RedShift SQL)

Sintaxe da gramática

 CURRENT_DATE
Copy

Amostra de padrões da origem

Código de entrada:

 SELECT CURRENT_DATE;
Copy

DATE

2024-09-22

Código de saída:
 SELECT
    CURRENT_DATE();
Copy

DATE_T

2024-09-22

Recomendações

Não há recomendações.

EWIs relacionados

Não há problemas conhecidos.

DATE

Descrição

Essa função converte uma expressão de entrada em uma data.

Essa função é totalmente compatível com o Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

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

Não foram encontrados problemas.

Related EWIs

Não há problemas conhecidos.

DATE_ADD

Description

A função DATE_ADD no Amazon Redshift adiciona um intervalo de tempo especificado a uma data ou carimbo de data/hora. Em que datetimepart é o tipo de intervalo (como 'day' ou 'month'), interval é o número de unidades a serem adicionadas (positivas ou negativas) e timestamp é a data original.

DATE_ADD é convertido para DATEADD, para obter mais informações sobre essa conversão, clique aqui.

Válidos datepart no Snowflake para DATE_ADD:

  • microsecond, microseconds

  • millisecond, milliseconds

  • second, seconds

  • minute, minutes

  • hour, hours

  • day, days

  • semana

  • month, months

  • quarter, quarters

  • year, years

Formatos não suportados no Snowflake para DATE_ADD:

  • semanas

  • 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

Não foram encontrados problemas.

Related EWIs

Não há problemas conhecidos.

DATE_DIFF

Description

DATEDIFF retorna a diferença entre as partes de data de duas expressões de data ou hora.

(Função DATEDIFF de referência da linguagem RedShift SQL)

Válidos datepart no Snowflake para DATE_DIFF:

  • microsecond, microseconds

  • millisecond, milliseconds

  • second, seconds

  • minute, minutes

  • hour, hours

  • day, days

  • semana

  • month, months

  • quarter, quarters

  • year, years

Formatos não suportados no Snowflake para DATEDIFF:

  • decade, decades

  • century, centuries

  • millennium, millennia

Grammar Syntax

 DATE_DIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
Copy

Essa função é totalmente compatível com o Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

year

month

day

year2

10

131

4016

10

semana

century

decade

574

10

100

Código de saída:
 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

year

month

day

year2

10

131

4016

10

semana

century

decade

574

10

100

Problemas conhecidos

Não foram encontrados problemas.

EWIs relacionados

Não há problemas conhecidos.

DATE_PART

Descrição

DATE_PART extrai valores de partes de datas de uma expressão. DATE_PART é um sinônimo da função PGDATE_PART.

(Função DATE_PART de referência da linguagem RedShift SQL)

Válidos datepart no Snowflake para DATE_PART:

  • second, seconds

  • minute, minutes

  • hour, hours

  • day, days

  • semana

  • dayofweek

  • dayofyear

  • month, months

  • quarter, quarters

  • year, years

  • epoch

Formatos inválidos no Snowflake para DATE_PART:

  • microsecond, microseconds

  • millisecond, milliseconds

  • semanas

  • decade, decades

  • century, centuries

  • millennium, millennia

Sintaxe da gramática

{PGDATE_PART | DATE_PART}(datepart, {date|timestamp})
Copy

Aviso

Essa função é parcialmente suportada pelo Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:
 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

Problemas conhecidos

Não foram encontrados problemas.

EWIs relacionados

  • SSC-EWI-PGOOO5: O formato de data/numérico atual pode ter um comportamento diferente no Snowflake.

DATE_TRUNC

Descrição

A função DATE_TRUNC trunca uma expressão ou literal de carimbo de data/hora com base na parte da data que você especificar, como hora, dia ou mês.

(Função DATE_TRUNC de referência da linguagem Redshift SQL).

No Snowflake essa função trunca um valor DATE, TIME ou TIMESTAMP com a precisão especificada.

Válidos <datepart> no Snowflake:

  • microsecond, microseconds

  • millisecond, milliseconds

  • second, seconds

  • minute, minutes

  • hour, hours

  • day, days

  • semana

  • month, months

  • quarter, quarters

  • year, years

Formatos inválidos no Snowflake:

  • Semanas

  • decade, decades

  • century, centuries

  • millennium, millennia

Essa função é totalmente compatível com o Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

Grammar Syntax

 DATE_TRUNC('datepart', timestamp)
Copy

Sample Source Patterns

Partes de data suportadas

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

Partes de data inválidas

Essa transformação é realizada para emular o comportamento do Redshift para as seguintes partes de data

  • 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

Para obter mais informações, consulte a seguinte documentação no Snowflake:

Known Issues

No Amazon Redshift, a precisão padrão para carimbos de data/hora é de 6 dígitos (microssegundos), enquanto no Snowflake, a precisão padrão é de 9 dígitos (nanossegundos). Devido a essas diferenças de precisão, é importante considerar suas necessidades específicas ao trabalhar com carimbos de data/hora. Se você precisar de precisão diferente em uma das plataformas, poderá usar as seguintes opções.

  1. Use ALTERSESSION:

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

Observe que, dependendo do tipo de dados usado para armazenar o valor obtido com DATE_TRUNC(), pode haver limitações de precisão que podem resultar em perda de exatidão.

Related EWIs

Não há problemas conhecidos.

DATEADD

Description

Aumenta o valor de DATE, TIME, TIMETZ ou TIMESTAMP em um intervalo especificado.

(Função DATEADD de referência da linguagem RedShift SQL)

A função DATEADD no Amazon Redshift adiciona um intervalo de tempo especificado a uma data ou carimbo de data/hora. Em que datepart é o tipo de intervalo (como «dia» ou «mês»), interval é o número de unidades a serem adicionadas (positivas ou negativas) e date é a data original.

Válidos datepart no Snowflake para DATEADD:

  • microsecond, microseconds

  • millisecond, milliseconds

  • second, seconds

  • minute, minutes

  • hour, hours

  • day, days

  • semana

  • month, months

  • quarter, quarters

  • year, years

Formatos não suportados no Snowflake para DATEADD:

  • semanas

  • decade, decades

  • century, centuries

  • millennium, millennia

Grammar Syntax

 DATEADD(datepart, interval, date)
Copy

Sample Source Patterns

Partes de data suportadas:

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

Partes de data não suportadas

Essa transformação é realizada para emular o comportamento do Redshift para as seguintes partes de data

  • semanas é convertido em sua parte de data suportada equivalente, week.

As seguintes partes da data são transformadas em seu equivalente em years:

  • decade, decades : converted to year times ten.

  • century, centuries: converted to year times one hundred.

  • 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

Notas

No Amazon Redshift, quando você usa DATEADD para adicionar anos a 29 de fevereiro de um ano bissexto, ele rola para 1º de março do ano seguinte porque o ano seguinte não é bissexto. O Redshift lida com a aritmética de datas movendo-se para a data válida mais próxima. Como o dia 29 de fevereiro não existe em anos não bissextos, o padrão é 1º de março. Por exemplo, adicionar um ano a 29 de fevereiro de 2020 resulta em 1º de março de 2021.

Related EWIs

Não há problemas conhecidos.

DATEDIFF

Description

DATEDIFF retorna a diferença entre as partes de data de duas expressões de data ou hora.

(Função DATEDIFF de referência da linguagem RedShift SQL)

Válidos datepart no Snowflake para DATEDIFF:

  • microsecond, microseconds

  • millisecond, milliseconds

  • second, seconds

  • minute, minutes

  • hour, hours

  • day, days

  • semana

  • month, months

  • quarter, quarters

  • year, years

Formatos não suportados no Snowflake para DATEDIFF:

  • decade, decades

  • century, centuries

  • millennium, millennia

Grammar Syntax

 DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
Copy

Essa função é totalmente compatível com o Snowflake.

Amostra de padrões da origem

Código de entrada:

 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

year

month

day

10

131

4016

semana

century

decade

574

10

100

Código de saída:
 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

year

month

day

10

131

4016

semana

century

decade

574

10

100

Problemas conhecidos

Não foram encontrados problemas.

EWIs relacionados

Não há problemas conhecidos.

GETDATE

Descrição

GETDATE retorna a data e a hora atuais no fuso horário da sessão atual (UTC por padrão). Retorna a data ou a hora de início da instrução atual, mesmo que esteja em um bloco de transação. (Função GETDATE de referência da linguagem Redshift SQL).

No Snowflake, essa função fornece a data e a hora atuais com precisão de nanossegundos (até 9 dígitos) e é sensível ao fuso horário.

Essa função é totalmente compatível com o Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

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

No Amazon Redshift, a precisão padrão para carimbos de data/hora é de 6 dígitos (microssegundos), enquanto no Snowflake, a precisão padrão é de 9 dígitos (nanossegundos). Devido a essas diferenças de precisão, é importante considerar suas necessidades específicas ao trabalhar com carimbos de data/hora. Se você precisar de precisão diferente em uma das plataformas, poderá usar as seguintes opções.

  1. Use ALTERSESSION:

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

Observe que, dependendo do tipo de dados usado para armazenar o valor obtido com GETDATE(), pode haver limitações de precisão que podem resultar em perda de exatidão.

Related EWIs

Não há problemas conhecidos.

TIMESTAMP

Description

A função TIMESTAMP é uma função do sistema que converte um valor de cadeia de caracteres em um carimbo de data/hora.

Essa função é totalmente compatível com o Snowflake.

Sintaxe da gramática

 select "timestamp"(VARCHAR);
Copy

Amostra de padrões da origem

Código de entrada:

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

«timestamp»

2024-03-01 03:22:33.000000

Código de saída:

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

TO_TIMESTAMP

2024-03-01 03:22:33.000

Problemas conhecidos

No Amazon Redshift, a precisão padrão para carimbos de data/hora é de 6 dígitos (microssegundos), enquanto no Snowflake, a precisão padrão é de 9 dígitos (nanossegundos). Devido a essas diferenças de precisão, é importante considerar suas necessidades específicas ao trabalhar com carimbos de data/hora. Se você precisar de precisão diferente em uma das plataformas, poderá usar as seguintes opções.

  1. Use ALTERSESSION:

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

Observe que, dependendo do tipo de dados usado para armazenar o valor obtido com GETDATE(), pode haver limitações de precisão que podem resultar em perda de exatidão.

EWIs relacionados

Não há problemas conhecidos.

TRUNC

Descrição

Trunca um TIMESTAMP e retorna um DATE.

Para obter mais informações, consulte a Função TRUNC.

Sintaxe da gramática

 TRUNC(timestamp)
Copy

Nota

Essa função é suportada pelo Snowflake. Entretanto, no Snowflake, ela trunca um valor DATE, TIME ou TIMESTAMP para a precisão especificada.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

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 relacionados

Não há problemas conhecidos.

Funções de janela

AVG

Descrição

A função de janela AVG retorna a média (média aritmética) dos valores de expressão de entrada.

(Função AVG de referência da linguagem Redshift SQL)

Essa função é totalmente compatível com o Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

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, dependendo do tipo de dados, pode se comportar de forma diferente em termos de arredondamento e formatação, o que pode resultar em precisão diferente ou casas decimais diferentes ao comparar o Redshift com o Snowflake.

Related EWIs

Não há problemas conhecidos.

COUNT

Description

A função de janela COUNT conta as linhas definidas pela expressão.

(Função COUNT de referência da linguagem Redshift SQL)

Essa função é totalmente compatível com o Snowflake.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

Sintaxe da gramática

 COUNT ( * | [ ALL ] expression) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
Copy

Amostra de padrões da origem

Dados de configuração

 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
Código de entrada:
 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
Código de saída:
 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

Problemas conhecidos

Não foram encontrados problemas.

EWIs relacionados

Não há problemas conhecidos.

DENSE_RANK

Descrição

A função de janela DENSE_RANK determina a classificação de um valor em um grupo de valores, com base na expressão ORDER BY na cláusula OVER. A função DENSE_RANK difere da RANK em um aspecto: se duas ou mais linhas empatarem, não haverá lacuna na sequência de valores classificados.

Para obter mais informações, consulte a Função DENSE_RANK.

Sintaxe da gramática

 DENSE_RANK() OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
) 
Copy

Nota

Essa função é suportada pelo Snowflake. No entanto, a cláusula ORDER BY é obrigatória no Snowflake. Caso não exista, um ORDER BY 1 será adicionado para garantir a equivalência total.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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 relacionados

Não há problemas conhecidos.

LEAD

Descrição

A função de janela LEAD retorna os valores de uma linha em um determinado deslocamento abaixo (depois) da linha atual na partição.

(Função LEAD de referência da linguagem Redshift SQL)

Aviso

Essa função é parcialmente suportada no Snowflake. No Redshift, o deslocamento pode ser um número inteiro constante ou uma expressão que é avaliada como um número inteiro. No Snowflake, ele tem a limitação de poder ser apenas uma constante.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

Sintaxe da gramática

 LEAD (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
Copy

Amostra de padrões da origem

Dados de configuração

 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
Código de entrada:
 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

nulo

200,00

nulo

300,00

300,00

300,00

nulo

300,00

nulo

nulo

nulo

nulo

250,00

250,00

250,00

350,00

250,00

350,00

nulo

350,00

nulo

nulo

nulo

Código de saída:
 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

nulo

200,00

nulo

300,00

300,00

300,00

nulo

300,00

nulo

nulo

nulo

nulo

250,00

250,00

250,00

350,00

250,00

350,00

nulo

350,00

nulo

nulo

nulo

Problemas conhecidos

Não foram encontrados problemas.

EWIs relacionados

Não há problemas conhecidos.

RANK

Descrição

A função de janela RANK determina a classificação de um valor em um grupo de valores, com base na expressão ORDER BY na cláusula OVER. Se a cláusula opcional PARTITION BY estiver presente, as classificações serão redefinidas para cada grupo de linhas.

Para obter mais informações, consulte a função RANK.

Sintaxe da gramática

 RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
) 
Copy

Nota

Essa função é suportada pelo Snowflake. No entanto, a cláusula ORDER BY é obrigatória no Snowflake. Caso não exista, um ORDER BY 1 será adicionado para garantir a equivalência total.

Amostra de padrões da origem

Código de entrada:

 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

Código de saída:

 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 relacionados

Não há problemas conhecidos.

ROW_NUMBER

Descrição

A função ROW_NUMBER window atribui um número ordinal da linha atual em um grupo de linhas, contando a partir de 1, com base na expressão ORDER BY na cláusula OVER. (RedShift SQL Função ROW_NUMBER window de referência da linguagem)

Sintaxe da gramática

 ROW_NUMBER() OVER(
  [ PARTITION BY expr_list ]
  [ ORDER BY order_list ]
)
Copy

Essa função é totalmente compatível com o Snowflake.

A cláusula ORDER BY é obrigatória no Snowflake. Caso não exista, um ORDER BY 1 será adicionado para garantir a equivalência total.

Para obter mais informações sobre identificadores entre aspas em funções, clique aqui.

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

Código de saída:

 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

Não foram encontrados problemas.

Related EWIs

Não há problemas conhecidos.