SnowConvert: Redshift関数

システム関数

IDENTITY

説明

IDENTITY 関数は、アイデンティティの初期値を決定するためにテーブルの指定された列を操作するシステム関数です。初期値がない場合は、関数が提供した値がデフォルト値となります。これはSnowflakeのシーケンスに変換されます。

文法構文

 "identity"(oid_id, oid_table_id, default)
Copy

注釈

この関数はRedshiftではサポートされなくなりました。アイデンティティを定義するためにデフォルト値を使用し、標準的なアイデンティティ列のように振る舞います。

サンプルソースパターン

入力コード:

 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 関数は、先頭と後続の空白を削除するか、オプションで指定した文字列と一致する先頭と後続の文字を削除することによって文字列をトリミングします。(RedShift SQL 言語リファレンス 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 関数は2つの式を連結し、結果の式を返します。(RedShift SQL 言語リファレンス 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 言語リファレンス 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: 第2引数が負の場合、空文字列を返します。

  • Redshift: 負の値でランタイムエラーを発生させます。

Related EWIs

既知の問題はありません。

LOWER

Description

LOWER 関数は文字列を小文字に変換します。(RedShift SQL 言語リファレンスLower関数)

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

values

test

test

values

test

test

values

関連 EWIs

既知の問題はありません。

QUOTE_IDENT

説明

QUOTE_IDENT 関数は、指定された文字列を先頭にダブルクォーテーションマーク、後続にダブルクォーテーションマークを付けた文字列として返します。(RedShift SQL 言語リファレンス QUOTE୧_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 言語リファレンス 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

すばしっこいきつね

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

すばしっこいきつね

100048 (2201B): 無効な正規表現: '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 繰り返し演算子の引数がありません: ?

既知の問題

  1. この関数には パラメーター 引数があり、ユーザーは p 値で表されるPerl互換正規表現(PCRE)方言を使ってパターンを解釈することができますが、コードを修正する際の問題を避けるため、この引数は削除されています。

関連 EWIs

  • SSC-EWI-0009: Regexp_Substr関数は POSIX 正規表現のみをサポートしています。

  • SSC-FDM-0032: パラメーターがリテラル値でないため、変換を完全に適用できませんでした

  • SSC-FDM- PG0011: このパターンマッチング条件では、 COLLATE 列制約の使用が無効になっています。

REPLACE

説明

既存の文字列内のすべての文字セットを、他の指定された文字で置き換えます。(Redshift SQL 言語リファレンス 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

アップル オレンジ バナナ グレープ

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

アップル オレンジ バナナ グレープ

http://example.com/new-path/resource

Known Issues

問題は見つかりませんでした。

Related EWIs

既知の問題はありません。

SPLIT_PART

Description

指定した区切り文字で文字列を分割し、指定した位置の部分を返します。(SQL 言語リファレンス 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

既知の問題

SnowflakeとRedshiftでは、大文字と小文字を区別しない照合(CASE_INSENSITIVE または en-ci)で使用した場合の SPLIT_PART の動作に違いがあります。

関連 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 言語リファレンス TRIM 関数)

Redshiftでは、キーワード(BOTHLEADING、または TRAILING)を使用してトリミング操作を実行する場所を指定することが可能です。この機能は、それぞれ TRIMLTRIMRTRIM 関数を使用することで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 言語リファレンスUpper関数)

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 言語リファレンス 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 言語リファレンス COUNT 関数)

COUNTAPPROXIMATE COUNT は、SnowflakeではCOUNTAPPROX_COUNT_DISTINCTで完全にサポートされています。

関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください

文法構文

 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 言語リファレンス MAX 関数)。

文法構文

 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 言語リファレンス 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 言語リファレンス 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

score

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

score

round_score

28.05

28

comission

round_comission

15.53969483712

15.54

関連 EWIs

既知の問題はありません。

SUM

説明

SUM 関数は、入力列または式の値の合計を返します。(RedShift SQL 言語リファレンス 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 言語リファレンス 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') はSnowflakeでは失敗します。なぜなら、6月は30日しかないからです。Snowflakeの TO_DATE は無効な日付を自動的に調整しません。一方、 is_strict をfalseにセットしたRedshiftの TO_DATE は7月1日に変換します。無効な日付文字列によるエラーを避けるために、 TRY_TO_DATE を使用することができます。これは、変換に失敗した場合に NULL を返します。これにより、クエリの実行がスムーズになり、無効な日付の特定が容易になります。

Related EWIs

  • SSC-FDM-RS0004: 無効な日付はSnowflakeでエラーを引き起こします。

  • SSC-EWI-PG0005: 日付または時刻の形式はSnowflakeではサポートされていません。

  • SSC-FDM-0032: パラメーターがリテラル値でないため、変換を完全に適用できませんでした

TO_CHAR

Description

TO_CHAR は、タイムスタンプや数値式を文字列データ形式に変換します。(Redshift SQL 言語リファレンス 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

YYYY および YY

-

直接サポートされています

YYY および 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

この 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

TZ および tz

UTC および utc

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

既知の問題

テンプレートパターン修飾子がサポートされていません

以下の形式テンプレート修飾子:

  • 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 言語リファレンス 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

任意のブランド

任意のブランド

任意のブランド

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

任意のブランド

任意のブランド

任意のブランド

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

result

appliances

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

result

appliances

brand

任意のブランド

Known Issues

  • Redshiftでは、改行、タブ、キャリッジの文字の扱いがSnowflakeと異なります。Redshiftは文字を文字そのものとして解釈します。Snowflakeはそれを適用します。

  • Snowflake関数は2つのパラメーターを受け取ります。1つ目は JSON リテラル、2つ目は内部のオブジェクトにアクセスするためのドットで区切られたパスです。この変換は、パスのリストを、それが列参照であっても、ドットで区切られたパスを結合する関数に置き換えます。

  • パスが変数を通して送信され、変数にスペースが含まれる場合は、引用符で囲む必要があります。

Related EWIs

問題は見つかりませんでした。

ハッシュ関数

FNV_HASH

Description

FNV_HASH すべての基本データ型に対して64ビットの FNV-1a非暗号化ハッシュ関数を計算します。\ (Redshift SQL 言語リファレンス 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 関数ではシードパラメーターはオプションですが、Snowflakeのハッシュ関数ではシードパラメーターは FNV アルゴリズムでのみ使用されるため、使用されません。

既知の問題

既知の問題はありません。

関連 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 言語リファレンス 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

greatest

least

nulls

40

10

25

least

greatest

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

greatest

least

nulls

40

10

NULL

least

greatest

GERMANY

USA

既知の問題

既知の問題はありません

関連 EWIs

NULLIF

説明

NULLIF 式は2つの引数を比較し、等しい場合はnullを返します。等しくない場合は、最初の引数が返されます。Redshiftでは、 NULLIF は、特定のシナリオで文字列値を比較する際に後続の空白を無視します。そのため、RedshiftとSnowflakeで動作が異なる場合があります。このため、 RTRIM の変換では、RedshiftとSnowflakeの間の等価性を取得するために追加されます(Redshift SQL 言語リファレンス 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 言語 リファレンス 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

既知の問題

既知の問題はありません。

関連 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 言語リファレンス 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 は間隔のタイプ('day''month' のような)、 interval は追加する単位数(正または負)、 timestamp は元の日付です。

DATE_ADDDATEADD に変換されます。この変換に関する詳しい情報は こちらをクリックしてください。

Snowflakeの DATE_ADD に有効なdatepart:

  • マイクロ秒、マイクロ秒

  • ミリ秒、ミリ秒

  • 秒、秒

  • 分、分

  • 時間、時間

  • 日、日

  • week

  • 月、月

  • 四半期、四半期

  • 年、年

Snowflakeの DATE_ADD でサポートされていない形式:

  • weeks

  • 10年、10年

  • 世紀、世紀

  • 1000年、1000年

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 は、2つの日付または時刻式の日付部分の差を返します。

(RedShift SQL 言語リファレンス DATEDIFF 関数)

Snowflakeの DATE_DIFF に有効なdatepart:

  • マイクロ秒、マイクロ秒

  • ミリ秒、ミリ秒

  • 秒、秒

  • 分、分

  • 時間、時間

  • 日、日

  • week

  • 月、月

  • 四半期、四半期

  • 年、年

Snowflakeの DATEDIFF でサポートされていない形式:

  • 10年、10年

  • 世紀、世紀

  • 1000年、1000年

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

year

month

day

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

year

month

day

year2

10

131

4016

10

week

century

decade

574

10

100

既知の問題

問題は見つかりませんでした。

関連 EWIs

既知の問題はありません。

DATE_PART

説明

DATE_PART は、式から日付部分の値を抽出します。DATE_PART は PGDATE_PART 関数の同義語です。

(RedShift SQL 言語リファレンス DATE_୧PART 関数)

Snowflakeの DATE_PART に有効なdatepart:

  • 秒、秒

  • 分、分

  • 時間、時間

  • 日、日

  • week

  • dayofweek

  • dayofyear

  • 月、月

  • 四半期、四半期

  • 年、年

  • epoch

Snowflakeの DATE_PART で無効な形式:

  • マイクロ秒、マイクロ秒

  • ミリ秒、ミリ秒

  • weeks

  • 10年、10年

  • 世紀、世紀

  • 1000年、1000年

文法構文

{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 言語リファレンス DATE_TRUNC 関数)。

Snowflake では、この関数は DATE、 TIME、または TIMESTAMP の値を指定された精度で切り捨てます。

Snowflakeで有効な<datepart> :

  • マイクロ秒、マイクロ秒

  • ミリ秒、ミリ秒

  • 秒、秒

  • 分、分

  • 時間、時間

  • 日、日

  • week

  • 月、月

  • 四半期、四半期

  • 年、年

Snowflakeの無効な形式:

  • 10年、10年

  • 世紀、世紀

  • 1000年、1000年

この関数は 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の動作をエミュレートするために実行されます

  • 10年、10年

  • 世紀、世紀

  • 1000年、1000年

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 言語リファレンス DATEADD 関数)

Amazon Redshiftの DATEADD 関数は、日付またはタイムスタンプに指定した時間間隔を追加します。datepart は間隔のタイプ('day'や'month'のような)、 interval は追加する単位数(正または負)、 date は元の日付です。

Snowflakeの DATEADD に有効なdatepart:

  • マイクロ秒、マイクロ秒

  • ミリ秒、ミリ秒

  • 秒、秒

  • 分、分

  • 時間、時間

  • 日、日

  • week

  • 月、月

  • 四半期、四半期

  • 年、年

Snowflakeの DATEADD でサポートされていない形式:

  • weeks

  • 10年、10年

  • 世紀、世紀

  • 1000年、1000年

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の動作をエミュレートするために実行されます

  • weeksは、同等のサポートされている日付部分、 week に変換されます。

以下の日付部分は、 の同等のものに変換されます。

  • decade、decades: 年を10倍したものに変換されます。

  • century, centuries: 年を100倍したものに変換されます。

  • millennium、millennia: 年を1000倍したものに変換されます。

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 は、2つの日付または時刻式の日付部分の差を返します。

(RedShift SQL 言語リファレンス DATEDIFF 関数)

Snowflakeの DATEDIFF に有効なdatepart:

  • マイクロ秒、マイクロ秒

  • ミリ秒、ミリ秒

  • 秒、秒

  • 分、分

  • 時間、時間

  • 日、日

  • week

  • 月、月

  • 四半期、四半期

  • 年、年

Snowflakeの DATEDIFF でサポートされていない形式:

  • 10年、10年

  • 世紀、世紀

  • 1000年、1000年

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

year

month

day

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

year

month

day

10

131

4016

week

century

decade

574

10

100

既知の問題

問題は見つかりませんでした。

関連 EWIs

既知の問題はありません。

GETDATE

説明

GETDATE は、現在のセッションのタイムゾーン(デフォルトでは UTC)における現在の日付と時刻を返します。トランザクションブロック内であっても、現在のステートメントの開始日時を返します。(Redshift SQL 言語リファレンス 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

"timestamp"

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 言語リファレンス 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 言語リファレンス 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によってサポートされています。しかし、 Snowflake では ORDER BY 句は必須です。存在しない場合は、完全な同等性を保証するために 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 ウィンドウ関数は、パーティション内の現在の行の下(後)にある、指定されたオフセットの行の値を返します。

(Redshift SQL 言語リファレンス 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によってサポートされています。しかし、 Snowflake では ORDER BY 句は必須です。存在しない場合は、完全な同等性を保証するために 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 言語リファレンス ROW_NUMBER ウィンドウ関数)

文法構文

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

この関数は Snowflake で完全にサポートされています。

Snowflake では ORDER BY 句は必須です。存在しない場合は、完全な同等性を保証するために 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

既知の問題はありません。