SnowConvert: Redshift関数¶
システム関数¶
IDENTITY¶
説明¶
IDENTITY 関数は、アイデンティティの初期値を決定するためにテーブルの指定された列を操作するシステム関数です。初期値がない場合は、関数が提供した値がデフォルト値となります。これはSnowflakeのシーケンスに変換されます。
文法構文¶
"identity"(oid_id, oid_table_id, default)
注釈
この関数は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;
id |
inventory_combo |
---|---|
1 |
5 |
2 |
8 |
3 |
11 |
3 |
14 |
出力コード:
CREATE TABLE IF NOT EXISTS table_test
(
id integer,
inventory_combo BIGINT IDENTITY(5,3) ORDER
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/13/2024", "domain": "test" }}';
INSERT INTO table_test (id) VALUES
(1),
(2),
(3),
(4);
SELECT * FROM
table_test;
id |
inventory_combo |
---|---|
1 |
5 |
2 |
8 |
3 |
11 |
3 |
14 |
文字列関数¶
BTRIM¶
説明¶
BTRIM 関数は、先頭と後続の空白を削除するか、オプションで指定した文字列と一致する先頭と後続の文字を削除することによって文字列をトリミングします。(RedShift SQL 言語リファレンス BTRIM 関数)
文法構文¶
BTRIM(string [, trim_chars ] )
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
SELECT ' abc ' AS untrim, btrim(' abc ') AS trim;
SELECT 'setuphistorycassettes' AS untrim, btrim('setuphistorycassettes', 'tes') AS trim;
utrim |
trim |
---|---|
abc |
abc |
untrim |
trim |
---|---|
setuphistorycassettes |
uphistoryca |
出力コード:
SELECT ' abc ' AS untrim,
TRIM(' abc ') AS trim;
SELECT 'setuphistorycassettes' AS untrim,
TRIM('setuphistorycassettes', 'tes') AS trim;
utrim |
trim |
---|---|
abc |
abc |
untrim |
trim |
---|---|
setuphistorycassettes |
uphistoryca |
既知の問題
問題は見つかりませんでした。
Related EWIs
既知の問題はありません。
CONCAT
Description
CONCAT 関数は2つの式を連結し、結果の式を返します。(RedShift SQL 言語リファレンス CONCAT 関数)。
Grammar Syntax
CONCAT ( expression1, expression2 )
この関数は Snowflake によって完全にサポートされています。
サンプルソースパターン¶
入力コード:¶
CREATE TABLE test_concat_function (
col1 varchar
);
INSERT INTO test_concat_function
VALUES ('name');
SELECT CONCAT(col1, ' TEST '),
"CONCAT"(col1, ' TEST '),
col1 || ' TEST '
FROM test_concat_function;
CONCAT(col1, ' TEST ') | "CONCAT"(col1, ' TEST ') | col1 || ' TEST ' |
---|---|---|
name TEST | name TEST | name TEST |
出力コード:
CREATE TABLE test_concat_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_concat_function
VALUES ('name');
SELECT CONCAT(col1, ' TEST '),
CONCAT(col1, ' TEST '),
col1 || ' TEST '
FROM
test_concat_function;
CONCAT(NAME, ' TEST ') | "CONCAT"(NAME, ' TEST ') | NAME || ' TEST ' |
---|---|---|
name TEST | name TEST | name TEST |
関連 EWIs¶
既知の問題はありません。
LEFT および RIGHT¶
説明¶
これらの関数は、文字列から指定された数の左端または右端の文字を返します。(SQL 言語リファレンス LEFT と RIGHT 関数)。
文法構文¶
LEFT( string, integer )
RIGHT( string, integer )
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
SELECT LEFT('Chicago', 3) AS left_3, RIGHT('Chicago', 3) AS right_3;
left_3 |
right_3 |
---|---|
Chi |
ago |
出力コード:
SELECT LEFT('Chicago', 3) AS left_3, RIGHT('Chicago', 3) AS right_3;
left_3 |
right_3 |
---|---|
Chi |
ago |
Know Issues
SnowflakeとRedshiftでは、 LEFT
と RIGHT
関数で負の値の扱いが異なります。
Snowflake: 第2引数が負の場合、空文字列を返します。
Redshift: 負の値でランタイムエラーを発生させます。
Related EWIs
既知の問題はありません。
LOWER
Description
LOWER 関数は文字列を小文字に変換します。(RedShift SQL 言語リファレンスLower関数)
Grammar Syntax
LOWER ( string )
この関数は Snowflake によって完全にサポートされています。
サンプルソースパターン¶
入力コード:¶
CREATE TABLE test_lower_function (
col1 varchar
);
INSERT INTO test_lower_function
VALUES ('test'),
('Test'),
('TEST');
SELECT LOWER(COL1),
"LOWER"(COL1),
LOWER('vaLues')
FROM test_lower_function;
LOWER(COL1) | "LOWER"(COL1) | LOWER('vaLues') |
---|---|---|
test | test | values |
test | test | values |
test | test | values |
出力コード:
CREATE TABLE test_lower_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/21/2024", "domain": "test" }}';
INSERT INTO test_lower_function
VALUES ('test'),
('Test'),
('TEST');
SELECT LOWER(COL1),
LOWER(COL1),
LOWER('vaLues')
FROM
test_lower_function;
LOWER(COL1) |
"LOWER"(COL1) |
LOWER('vaLues') |
---|---|---|
test |
test |
values |
test |
test |
values |
test |
test |
values |
関連 EWIs¶
既知の問題はありません。
QUOTE_IDENT¶
説明¶
QUOTE_IDENT 関数は、指定された文字列を先頭にダブルクォーテーションマーク、後続にダブルクォーテーションマークを付けた文字列として返します。(RedShift SQL 言語リファレンス QUOTE୧_IDENT 関数)。
この関数の機能を複製するには、 CONCAT関数に変換します。
文法構文¶
QUOTE_IDENT(string)
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
SELECT
QUOTE_IDENT('"CAT"'),
"QUOTE_IDENT"('Foo bar') ;
quote_ident |
quote_ident |
---|---|
"""CAT""" |
"Foo bar""" |
出力コード:
SELECT
CONCAT('"', REPLACE('"CAT"', '"', '""'), '"'),
CONCAT('"', REPLACE('Foo bar', '"', '""'), '"');
quote_ident |
quote_ident |
---|---|
"""CAT""" |
"Foo bar""" |
既知の問題
問題は見つかりませんでした。
Related EWIs
既知の問題はありません。
REGEXP_REPLACE
Description
これらの関数は、文字列から正規表現パターンを検索し、そのパターンが出現する文字列を指定された文字列で置き換えます。(SQL 言語リファレンス REGEXP_୧ REPLACE 関数)。
Grammar Syntax
REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )
警告
この関数は Snowflake によって部分的にサポートされています。
サンプルソースパターン¶
入力コード:¶
CREATE TABLE my_table (col1 varchar);
SELECT regexp_replace('the fox', 'FOX', 'quick brown fox', 1, 'ip');
SELECT
regexp_replace(d, '[hidden]'),
regexp_replace(d, f)
FROM
(SELECT
regexp_replace('pASswd7','(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+') as d, 'passwd7' as f);
SELECT regexp_replace(col1, 'passwd7', '[hidden]', 1, 'ip') as rp from my_table;
regexp_replace |
regexp_replace |
regexp_replace |
---|---|---|
すばしっこいきつね |
pASsw7 |
pASsw7 |
出力コード:
CREATE TABLE my_table (col1 varchar)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "00/00/0000", "domain": "test" }}';
SELECT
REGEXP_REPLACE('the fox', 'FOX', 'quick brown fox', 1, 0, 'i');
SELECT
REGEXP_REPLACE(d, '[hidden]'),
REGEXP_REPLACE(d,
--** SSC-FDM-0032 - PARAMETER 'regex_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
f)
FROM
(SELECT
REGEXP_REPLACE('pASswd7',
!!!RESOLVE EWI!!! /*** SSC-EWI-0009 - regexp_replace FUNCTION ONLY SUPPORTS POSIX REGULAR EXPRESSIONS ***/!!!
'(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+') as d, 'passwd7' as f);
SELECT
REGEXP_REPLACE(col1, 'passwd7', '[hidden]', 1, 0, 'i') as rp from
my_table;
REGEXP_REPLACE |
RESULT |
---|---|
すばしっこいきつね |
100048 (2201B): 無効な正規表現: '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 繰り返し演算子の引数がありません: ? |
既知の問題¶
この関数には
パラメーター
引数があり、ユーザーは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)
Sample Source Patterns
Input Code:
SELECT REPLACE('Hello World', ' ', '_') AS modified_string,
REPLACE('Apple, Orange, Banana, Grape', ',', '') AS fruits,
REPLACE('http://example.com/path/to/resource', '/path/to', '/new-path') AS updated_url;
MODIFIED_STRING |
FRUITS |
UPDATED_URL |
---|---|---|
Hello_World |
アップル オレンジ バナナ グレープ |
http://example.com/new-path/resource |
出力コード:
SELECT REPLACE('Hello World', ' ', '_') AS modified_string,
REPLACE('Apple, Orange, Banana, Grape', ',', '') AS fruits,
REPLACE('http://example.com/path/to/resource', '/path/to', '/new-path') AS updated_url;
MODIFIED_STRING |
FRUITS |
UPDATED_URL |
---|---|---|
Hello_World |
アップル オレンジ バナナ グレープ |
http://example.com/new-path/resource |
Known Issues
問題は見つかりませんでした。
Related EWIs
既知の問題はありません。
SPLIT_PART
Description
指定した区切り文字で文字列を分割し、指定した位置の部分を返します。(SQL 言語リファレンス SPLIT_୧PART 関数)。
Grammar Syntax
SPLIT_PART(string, delimiter, position)
この関数は Snowflake によって完全にサポートされています。
サンプルソースパターン¶
入力コード:¶
select split_part('abc$def$ghi','$',2) AS split_1,
split_part('abc$def$ghi','$',4) AS split_2,
split_part('abc$def$ghi','#',1) AS split_3;
split_1 | split_2 | split_3 |
---|---|---|
def | abc$def$ghi |
出力コード:
select split_part('abc$def$ghi','$',2) AS split_1,
split_part('abc$def$ghi','$',4) AS split_2,
split_part('abc$def$ghi','#',1) AS split_3;
split_1 | split_2 | split_3 |
---|---|---|
def | abc$def$ghi |
既知の問題¶
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 )
警告
この関数は Snowflake で部分的にサポートされています。
サンプルソースパターン¶
入力コード:¶
SELECT SUBSTRING('machine' FROM 3 for 2) AS machien_3_2, SUBSTRING('machine',1,4) AS machine_1_4;
SELECT SUBSTRING('12345'::varbyte, 2, 4) AS substring_varbyte;
machien_3_2 |
machine_1_4 |
---|---|
ch |
mach |
出力コード:
SELECT SUBSTRING('machine', 3, 2) AS machien_3_2, SUBSTRING('machine',1,4) AS machine_1_4;
SELECT SUBSTRING('12345':: BINARY, 2, 4) !!!RESOLVE EWI!!! /*** SSC-EWI-RS0006 - THE BEHAVIOR OF THE SUBSTRING FUNCTION MAY DIFFER WHEN APPLIED TO BINARY DATA. ***/!!! AS substring_varbyte;
machien_3_2 |
machine_1_4 |
---|---|
ch |
mach |
既知の問題¶
Redshiftの start_position
が0以下の場合、 SUBSTRING
関数は数学演算(start_position + number_characters
)を実行します。結果が0以下の場合、 SUBSTRING
は空の文字列を返します。Snowflakeでは、 start_position
が0以下の場合の動作が異なり、結果が異なります。
関連 EWIs¶
既知の問題はありません。
TRIM¶
説明¶
TRIM 関数は文字列を空白または指定した文字でトリミングします。(RedShift SQL 言語リファレンス TRIM 関数)
Redshiftでは、キーワード(BOTH
、 LEADING
、または TRAILING
)を使用してトリミング操作を実行する場所を指定することが可能です。この機能は、それぞれ TRIM
、 LTRIM
、 RTRIM
関数を使用することでSnowflakeで複製することができます。
文法構文¶
TRIM( [ BOTH | LEADING | TRAILING ] [trim_chars FROM ] string )
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
SELECT TRIM(' dog ') AS SimpleTrim;
SELECT TRIM(LEADING '"' FROM'"dog"') AS LeadingTrim;
SELECT TRIM(TRAILING '"' FROM'"dog"') AS TrailingTrim;
SELECT TRIM('x' FROM 'xxxHello Worldxxx') AS FromTrim;
SimpleTrim |
---|
dog |
LeadingTrim |
---|
dog" |
TrailingTrim |
---|
"dog |
FromTrim |
---|
Hello World |
出力コード:
SELECT TRIM(' dog ') AS SimpleTrim;
SELECT
LTRIM('"dog"', '"') AS LeadingTrim;
SELECT
RTRIM('"dog"', '"') AS TrailingTrim;
SELECT
TRIM('xxxHello Worldxxx', 'x') AS FromTrim;
SimpleTrim |
---|
dog |
LeadingTrim |
---|
dog" |
TrailingTrim |
---|
"dog |
FromTrim |
---|
Hello World |
Know Issues
問題は見つかりませんでした。
Related EWIs
既知の問題はありません。
UPPER
Description
UPPER 関数は文字列を大文字に変換します。(RedShift SQL 言語リファレンスUpper関数)
Grammar Syntax
UPPER ( string )
この関数は Snowflake によって完全にサポートされています。
サンプルソースパターン¶
入力コード:¶
CREATE TABLE test_upper_function (
col1 varchar
);
INSERT INTO test_upper_function
VALUES ('test'),
('Test'),
('TEST');
SELECT UPPER(COL1),
"UPPER"(COL1),
UPPER('vaLues')
FROM test_upper_function;
UPPER(COL1) | "UPPER"(COL1) | UPPER('vaLues') |
---|---|---|
TEST | TEST | VALUES |
TEST | TEST | VALUES |
TEST | TEST | VALUES |
出力コード:
CREATE TABLE test_upper_function (
col1 varchar
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/21/2024", "domain": "test" }}';
INSERT INTO test_upper_function
VALUES ('test'),
('Test'),
('TEST');
SELECT UPPER(COL1),
UPPER(COL1),
UPPER('vaLues')
FROM
test_upper_function;
UPPER(COL1) |
"UPPER"(COL1) |
UPPER('vaLues') |
---|---|---|
TEST |
TEST |
VALUES |
TEST |
TEST |
VALUES |
TEST |
TEST |
VALUES |
関連 EWIs¶
既知の問題はありません。
集計関数¶
AVG¶
説明¶
AVG 関数は入力式の値の平均(算術平均)を返します。(Redshift SQL 言語リファレンス AVG 関数)
この関数は Snowflake によって完全にサポートされています。
関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください。
Grammar Syntax
AVG ( [ DISTINCT | ALL ] expression )
Sample Source Patterns
セットアップデータ
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column SUPER
);
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column VARIANT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/27/2024", "domain": "test" }}';
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
Input Code:
SELECT
AVG(DISTINCT my_smallint_column) AS type_smallint,
AVG(ALL my_integer_column) AS type_integer,
AVG(my_bigint_column) AS type_bigint,
AVG(my_numeric_column) AS type_numeric,
AVG(my_decimal_column) AS type_decimal,
AVG(my_real_column) AS type_real,
AVG(my_double_precision_column) AS type_double_precision,
AVG(my_super_column) AS type_super
FROM example_table;
type_smallint |
type_integer |
type_bigint |
type_numeric |
type_decimal |
type_real |
type_double_precision |
type_super |
---|---|---|---|---|---|---|---|
3 |
300 |
30000000000 |
345 |
676 |
2.2080000400543214 |
2.40674 |
46779 |
Output Code:
SELECT
AVG(DISTINCT my_smallint_column) AS type_smallint,
AVG(ALL my_integer_column) AS type_integer,
AVG(my_bigint_column) AS type_bigint,
AVG(my_numeric_column) AS type_numeric,
AVG(my_decimal_column) AS type_decimal,
AVG(my_real_column) AS type_real,
AVG(my_double_precision_column) AS type_double_precision,
AVG(my_super_column) AS type_super
FROM example_table;
type_smallint |
type_integer |
type_bigint |
type_numeric |
type_decimal |
type_real |
type_double_precision |
type_super |
---|---|---|---|---|---|---|---|
3.000000 |
300.000000 |
30000000000.000000 |
345.800000 |
676.400000 |
2.208 |
2.40674 |
46779 |
注意
AVG は、データ型に応じて、丸めや形式化に関して異なる動作をする可能性があり、RedshiftとSnowflakeを比較すると、精度や小数点以下の桁数が異なる場合があります。
Related EWIs
既知の問題はありません。
COUNT
Description
COUNT 関数は式で定義された行を数えます。(Redshift SQL 言語リファレンス COUNT 関数)
COUNT
とAPPROXIMATE COUNT
は、SnowflakeではCOUNT
とAPPROX_COUNT_DISTINCT
で完全にサポートされています。
関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください。
文法構文¶
COUNT ( * | expression )
COUNT ( [ DISTINCT | ALL ] expression )
APPROXIMATE COUNT ( DISTINCT expression )
サンプルソースパターン¶
セットアップデータ¶
CREATE TABLE sales (
sale_id INT PRIMARY KEY,
product_id INT,
sale_amount DECIMAL(10, 2),
sale_date DATE,
customer_id INT
);
INSERT INTO sales (sale_id, product_id, sale_amount, sale_date, customer_id) VALUES
(1, 101, 100.00, '2024-01-01', 1001),
(2, 102, 200.00, '2024-01-01', 1002),
(3, 101, 150.00, '2024-01-02', 1001),
(4, 103, 250.00, '2024-01-02', 1003),
(5, 102, 300.00, '2024-01-03', 1002),
(6, 101, 200.00, '2024-01-03', 1004),
(7, 101, 120.00, '2024-01-04', 1001),
(8, 102, 180.00, '2024-01-04', 1005),
(9, 103, 300.00, '2024-01-05', 1003),
(10, 101, 130.00, '2024-01-05', 1006),
(10, 101, 130.00, '2024-01-05', 1006);
入力コード:¶
SELECT
product_id,
COUNT(sale_id) AS total_sales,
"COUNT"(DISTINCT sale_id) AS total_sales_distinct,
"count"(ALL sale_id) AS total_sales_all,
COUNT(*) AS total_sales_asterisk,
APPROXIMATE COUNT ( DISTINCT sale_id) AS aprroximate_count_total_sales
FROM
sales
GROUP BY
product_id
ORDER BY
total_sales DESC;
PRODUCT_ID | TOTAL_SALES | TOTAL_SALES_DISTINCT | TOTAL_SALES_ALL | TOTAL_SALES_ASTERISK | APRROXIMATE_COUNT_TOTAL_SALES |
---|---|---|---|---|---|
101 | 6 | 5 | 6 | 6 | 5 |
102 | 3 | 3 | 3 | 3 | 3 |
103 | 2 | 2 | 2 | 2 | 2 |
出力コード:¶
SELECT
product_id,
COUNT(sale_id) AS total_sales,
COUNT(DISTINCT sale_id) AS total_sales_distinct,
COUNT(ALL sale_id) AS total_sales_all,
COUNT(*) AS total_sales_asterisk,
APPROX_COUNT_DISTINCT ( DISTINCT sale_id) AS aprroximate_count_total_sales
FROM
sales
GROUP BY
product_id
ORDER BY
total_sales DESC;
PRODUCT_ID | TOTAL_SALES | TOTAL_SALES_DISTINCT | TOTAL_SALES_ALL | TOTAL_SALES_ASTERISK | APRROXIMATE_COUNT_TOTAL_SALES |
---|---|---|---|---|---|
101 | 6 | 5 | 6 | 6 | 5 |
102 | 3 | 3 | 3 | 3 | 3 |
103 | 2 | 2 | 2 | 2 | 2 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
既知の問題はありません。
数学関数¶
MAX¶
説明¶
MAX 関数は、行のセット内の最大値を返します。(RedShift SQL 言語リファレンス MAX 関数)。
文法構文¶
MAX ( [ DISTINCT | ALL ] expression )
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
CREATE TABLE test_max_function (
col1 INT
);
INSERT INTO test_max_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MAX(COL1), MAX(DISTINCT COL1), MAX(ALL COL1) FROM test_max_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
200 |
200 |
200 |
出力コード:
CREATE TABLE test_max_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_max_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MAX(COL1), MAX(DISTINCT COL1), MAX(ALL COL1) FROM
test_max_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
200 |
200 |
200 |
Related EWIs
既知の問題はありません。
MIN
Description
MIN 関数は、行のセット内の最小値を返します(RedShift SQL 言語リファレンス MIN 関数)。
Grammar Syntax
MIN ( [ DISTINCT | ALL ] expression )
この関数は Snowflake によって完全にサポートされています。
サンプルソースパターン¶
入力コード:¶
CREATE TABLE test_min_function (
col1 INT
);
INSERT INTO test_min_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MIN(COL1), MIN(DISTINCT COL1), MIN(ALL COL1) FROM test_min_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
2 |
2 |
2 |
出力コード:
CREATE TABLE test_min_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_min_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT MIN(COL1), MIN(DISTINCT COL1), MIN(ALL COL1) FROM
test_min_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
2 |
2 |
2 |
関連 EWIs¶
既知の問題はありません。
NUMERIC¶
説明¶
NUMERIC 関数は文字列値を数値にキャストするシステム関数です。
この関数は Snowflake で完全にサポートされています。
Grammar Syntax
select "numeric"(VARCHAR);
Sample Source Patterns
Input Code:
SELECT "numeric"('2024');
"数値" |
---|
2024 |
出力コード:
SELECT
TO_NUMERIC('2024');
TO_NUMERIC |
---|
2024 |
Related EWIs
既知の問題はありません。
ROUND
Description
ROUND 関数は、最も近い整数または小数点に数値を丸めます。(RedShift SQL 言語リファレンス ROUND 関数)。
Grammar Syntax
ROUND(number [ , integer ] )
この関数は Snowflake によって完全にサポートされています。
サンプルソースパターン¶
入力コード:¶
SELECT 28.05 AS score, ROUND(28.05) AS round_score;
SELECT 15.53969483712 AS comission, ROUND(15.53969483712, 2) AS round_comission;
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;
score |
round_score |
---|---|
28.05 |
28 |
comission |
round_comission |
---|---|
15.53969483712 |
15.54 |
関連 EWIs¶
既知の問題はありません。
SUM¶
説明¶
SUM 関数は、入力列または式の値の合計を返します。(RedShift SQL 言語リファレンス SUM 関数)
文法構文¶
SUM ( [ DISTINCT | ALL ] expression )
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
CREATE TABLE test_sum_function (
col1 INT
);
INSERT INTO test_sum_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT SUM(COL1), SUM(DISTINCT COL1), SUM(ALL COL1) FROM test_sum_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
224 |
222 |
224 |
出力コード:
CREATE TABLE test_sum_function (
col1 INT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO test_sum_function
VALUES ('200'),
('20'),
('2'),
('2');
SELECT SUM(COL1), SUM(DISTINCT COL1), SUM(ALL COL1) FROM
test_sum_function;
SUM(COL1) |
SUM(DISTINCT COL1) |
SUM(ALL COL1) |
---|---|---|
224 |
222 |
224 |
Related EWIs
既知の問題はありません。
TRUNC
Description
TRUNC 関数は、数値を直前の整数または小数点に切り捨てます。
詳しくは、 TRUNC 関数をご参照ください。
Grammar Syntax
TRUNC(number [ , integer ])
この関数は Snowflake によって完全にサポートされています。
サンプルソースパターン¶
入力コード:¶
CREATE TABLE test_trunc_function (
col1 INT,
col2 FLOAT
);
INSERT INTO test_trunc_function
VALUES ('200','111.13'),
('20','111.133444'),
('2','111.1350');
SELECT TRUNC(col1, -1), TRUNC(col2, -1) FROM test_trunc_function;
TRUNC(COL1, -1) |
TRUNC(COL2, -1) |
---|---|
200 |
110 |
20 |
110 |
0 |
110 |
出力コード:
CREATE TABLE test_trunc_function (
col1 INT,
col2 FLOAT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/30/2024" }}';
INSERT INTO test_trunc_function
VALUES ('200','111.13'),
('20','111.133444'),
('2','111.1350');
SELECT TRUNC(col1, -1), TRUNC(col2, -1) FROM test_trunc_function;
TRUNC(COL1, -1) |
TRUNC(COL2, -1) |
---|---|
200 |
110 |
20 |
110 |
0 |
110 |
関連 EWIs¶
既知の問題はありません。
データ型形式化関数¶
TO_DATE¶
説明¶
TO_DATE は、文字列で表現された日付を DATE データ型に変換します。(Redshift SQL 言語リファレンス TO_DATE 関数)
この関数は Snowflake で完全にサポートされています。
関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください。
Grammar Syntax
TO_DATE(string, format, [is_strict])
Sample Source Patterns
Input Code:
SELECT TO_DATE('02 Oct 2001', 'DD Mon YYYY');
SELECT TO_DATE('20010631', 'YYYYMMDD', FALSE);
SELECT TO_DATE('20010631', 'YYYYMMDD', TRUE);
SELECT TO_DATE('1,993 12 23', 'Y,YYY MM DD');
SELECT TO_DATE(d, 'YYYY/MM/DD'),
TO_DATE(d, f)
FROM (SELECT '2001-01-01'::date as d, 'DD/MM/YYYY' as f);
to_date |
to_date |
to_date |
---|---|---|
2001-10-02 |
2001-07-01 |
[22008] ERROR: 日付/時刻フィールドの日付値が範囲外です: 2001-6-31 |
Output Code:
SELECT TO_DATE('02 Oct 2001', 'DD Mon YYYY');
SELECT
TRY_TO_DATE(/*** SSC-FDM-RS0004 - INVALID DATES WILL CAUSE ERRORS IN SNOWFLAKE ***/ '20010631', 'YYYYMMDD');
SELECT TO_DATE('20010631', 'YYYYMMDD');
SELECT TO_DATE('1,993 12 23', 'Y,YYY MM DD') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - Y,YYY MM DD FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!;
SELECT TO_DATE(d, 'YYYY/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_DATE(d, f)
FROM (SELECT '2001-01-01'::date as d, 'DD/MM/YYYY' as f);
to_date |
to_date |
to_date |
---|---|---|
2001-10-02 |
NULL |
'20010631'を'YYYYMMDD'という形式で日付として解析できません |
Known Issues
クエリ
SELECT TO_DATE('20010631', 'YYYYMMDD')
は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')
サンプルソースパターン¶
入力コード:¶
SELECT TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYYY'),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYY'),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'TH'),
"to_char"(timestamp '2009-12-31 23:15:59', 'MON-DY-DD-YYYY HH12:MIPM'),
TO_CHAR(125.8, '999.99'),
"to_char"(125.8, '999.99');
TO_CHAR |
TO_CHAR |
TO_CHAR |
TO_CHAR |
TO_CHAR |
---|---|---|---|---|
2009 |
009 |
DEC-THU-31-2009 11:15PM |
125.80 |
125.80 |
出力コード:¶
SELECT
TO_CHAR(timestamp '2009-12-31 23:15:59', 'YYYY'),
PUBLIC.YEAR_PART_UDF(timestamp '2009-12-31 23:15:59', 3),
TO_CHAR(timestamp '2009-12-31 23:15:59', 'TH') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - TH FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
PUBLIC.MONTH_SHORT_UDF(timestamp '2009-12-31 23:15:59', 'uppercase') || '-' || PUBLIC.DAYNAME_SHORT_UDF(timestamp '2009-12-31 23:15:59', 'uppercase') || TO_CHAR(timestamp '2009-12-31 23:15:59', '-DD-YYYY HH12:MI') || PUBLIC.MERIDIAN_INDICATORS_UDF(timestamp '2009-12-31 23:15:59', 'uppercase'),
TO_CHAR(125.8, '999.99'),
TO_CHAR(125.8, '999.99');
TO_CHAR |
TO_CHAR |
---|---|
2009 |
Dec-Thu-31-2009 11:15PM |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-EWI-PG0005: 現在の日付/数値形式はSnowflakeでは動作が異なる可能性があります。
日付時刻値の場合¶
説明¶
以下の形式文字列は、 TO_CHAR のような関数に適用されます。これらの文字列には、日付の区切り文字('-
'、'/
'、':
'など)と、以下の "dateparts" および "timeparts" を含めることができます。(Redshift日付時刻形式文字列リファレンスページ)
文法構文¶
TO_CHAR (timestamp_expression, 'format')
次のテーブルは、各形式要素とSnowflakeのマッピングを指定します。
Redshift |
Snowflake |
注意 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
- |
直接サポートされています |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
この UDF が正しく動作するためには、Snowflakeのセッションパラメーター |
|
|
|
|
|
|
|
- |
直接サポートされています |
|
|
|
|
- |
直接サポートされています |
|
- |
直接サポートされています |
|
- |
直接サポートされています |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Redshiftのドキュメント によると、タイムゾーンを含むすべてのタイムスタンプは UTC に格納されており、この形式要素は固定結果を返すようになっています |
|
|
Redshiftのドキュメント によると、タイムゾーンを含むすべてのタイムスタンプは UTC に格納されており、この形式要素は固定結果を返すようになっています |
|
|
|
|
これは「スペルモード」の PostgreSQL テンプレートパターン修飾子ですが、Redshift上では何もしないので、出力から削除されています。 |
|
|
これも「固定形式」用のテンプレートパターン修飾子ですが、 TO_CHAR 関数では使い道がないので削除します。 |
サンプルソースパターン¶
形式要素の直接変換(関数なし/UDFs)¶
結果は単一の TO_CHAR 関数として保存されます
Redshift¶
SELECT TO_CHAR('2013-10-03 13:50:15.456871'::TIMESTAMP, 'DD/MM/YY HH:MI:SS.MS') AS col1;
+----------------------+
|col1 |
+----------------------+
|03/10/13 01:50:15.456 |
+----------------------+
Snowflake¶
SELECT TO_CHAR('2013-10-03 13:50:15.456871'::TIMESTAMP, 'DD/MM/YY HH12:MI:SS.FF3') AS col1;
+----------------------+
|col1 |
+----------------------+
|03/10/13 01:50:15.456 |
+----------------------+
関数/UDFs を使った形式変換¶
結果は、複数の TO_CHAR、 UDFs と、日付時刻値の等価な文字列表現を生成するSnowflake組み込み関数を連結したものです
Redshift¶
SELECT TO_CHAR(DATE '2025-07-05', '"Today is " Month DAY DD, "it belongs to the week " IW') AS result;
+-------------------------------------------------------------+
|result |
+-------------------------------------------------------------+
|Today is July SATURDAY 05, it belongs to the week 27 |
+-------------------------------------------------------------+
Snowflake¶
SELECT
'Today is ' ||
TO_CHAR(DATE '2025-07-05', ' ') ||
PUBLIC.FULL_MONTH_NAME_UDF(DATE '2025-07-05', 'firstOnly') ||
' ' ||
PUBLIC.DAYNAME_LONG_UDF(DATE '2025-07-05', 'uppercase') ||
TO_CHAR(DATE '2025-07-05', ' DD, ') ||
'it belongs to the week ' ||
TO_CHAR(DATE '2025-07-05', ' ') ||
WEEKISO(DATE '2025-07-05') AS result;
+-------------------------------------------------------------+
|result |
+-------------------------------------------------------------+
|Today is July SATURDAY 05, it belongs to the week 27 |
+-------------------------------------------------------------+
引用符で囲まれているテキスト¶
二重引用符で囲まれたテキスト内の形式要素は解釈されずに直接出力に追加され、エスケープされた二重引用符はSnowflakeでエスケープされた同等のものに変換されます。
Redshift¶
SELECT
TO_CHAR(DATE '2025-01-16', 'MM "TESTING DD" DD') AS result1,
TO_CHAR(DATE '2025-01-16', 'MM TESTING \\"DD\\" DD') AS result2,
TO_CHAR(DATE '2025-01-16', 'MM "TESTING \\"DD\\"" DD') AS result3;
+-----------------+-------------------+-------------------+
|result1 |result2 |result3 |
+-----------------+-------------------+-------------------+
|01 TESTING DD 16 |01 TEST5NG "16" 16 |01 TESTING "DD" 16 |
+-----------------+-------------------+-------------------+
Snowflake¶
SELECT
TO_CHAR(DATE '2025-01-16', 'MM ') || 'TESTING DD' || TO_CHAR(DATE '2025-01-16', ' DD') AS result1,
TO_CHAR(DATE '2025-01-16', 'MM TEST') || PUBLIC.ISO_YEAR_PART_UDF(DATE '2025-01-16', 1) || TO_CHAR(DATE '2025-01-16', 'NG ""DD"" DD') AS result2,
TO_CHAR(DATE '2025-01-16', 'MM ') || 'TESTING "DD"' || TO_CHAR(DATE '2025-01-16', ' DD') AS result3;
+-----------------+-------------------+-------------------+
|result1 |result2 |result3 |
+-----------------+-------------------+-------------------+
|01 TESTING DD 16 |01 TEST5NG "16" 16 |01 TESTING "DD" 16 |
+-----------------+-------------------+-------------------+
既知の問題¶
テンプレートパターン修飾子がサポートされていません¶
以下の形式テンプレート修飾子:
FM (フィルモード)
TH およびth(大文字および小文字の序数のサフィックス)
TM (翻訳モード)
サポートされていないため、形式に含めると SSC-EWI-PG0005が生成されます
入力コード:
SELECT TO_CHAR(CURRENT_DATE, 'FMMonth'),
TO_CHAR(CURRENT_DATE, 'DDTH'),
TO_CHAR(CURRENT_DATE, 'DDth'),
TO_CHAR(CURRENT_DATE, 'TMMonth');
出力コード:
SELECT
TO_CHAR(CURRENT_DATE(), 'FM') || PUBLIC.FULL_MONTH_NAME_UDF(CURRENT_DATE(), 'firstOnly') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - FMMonth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'DDTH') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - DDTH FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'DDth') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - DDth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!,
TO_CHAR(CURRENT_DATE(), 'TM') || PUBLIC.FULL_MONTH_NAME_UDF(CURRENT_DATE(), 'firstOnly') !!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - TMMonth FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!;
変数を通して渡される形式パラメーター
形式パラメーターが文字列リテラルではなく変数として渡された場合、形式要素の変換は適用できず、関数の使用時に警告 FDM が追加されます。
入力コード:
SELECT TO_CHAR(d, 'YYYY/MM/DD'),
TO_CHAR(d, f)
FROM (SELECT TO_DATE('2001-01-01','YYYY-MM-DD') as d, 'DD/MM/YYYY' as f);
出力コード:
SELECT TO_CHAR(d, 'YYYY/MM/DD'),
--** SSC-FDM-0032 - PARAMETER 'format_string' IS NOT A LITERAL VALUE, TRANSFORMATION COULD NOT BE FULLY APPLIED **
TO_CHAR(d, f)
FROM (SELECT TO_DATE('2001-01-01','YYYY-MM-DD') as d, 'DD/MM/YYYY' as f);
関連 EWIs¶
SSC-EWI-PG0005: 現在の日付/数値形式はSnowflakeでは動作が異なる可能性があります。
SSC-FDM-0032: パラメーターがリテラル値でないため、変換を完全に適用できませんでした
JSON 関数¶
JSON_EXTRACT_PATH_TEXT¶
説明¶
JSON_EXTRACT_PATH_TEXT 関数は、 JSON 文字列内の一連のパス要素によって参照されるキーと値のペアの値を返します。(RedShift SQL 言語リファレンス JSON_EXTRACT_PATH_TEXT 関数)
文法構文¶
JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' as VALID_JSON,
'notvalidjson' as INVALID_JSON,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand') AS VALID_JSON_FLAG_DEFAULT_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand', false) AS VALID_JSON_FLAG_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, 'house', 'appliances', 'washing machine', 'brand', true) AS VALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, 'house', 'appliances', 'washing machine', 'brand', true) AS INVALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, 'house', 'appliances', 'washing machine', 'brand', false) AS INVALID_JSON_FLAG_FALSE
;
VALID_JSON |
INVALID_JSON |
VALID_JSON_FLAG_DEFAULT_OFF |
VALID_JSON_FLAG_OFF |
VALID_JSON_FLAG_TRUE |
INVALID_JSON_FLAG_TRUE |
---|---|---|---|---|---|
- |
notvalidjson |
任意のブランド |
任意のブランド |
任意のブランド |
NULL |
出力コード:
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' as VALID_JSON,
'notvalidjson' as INVALID_JSON,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_DEFAULT_OFF,
JSON_EXTRACT_PATH_TEXT(VALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_OFF,
JSON_EXTRACT_PATH_TEXT(TRY_PARSE_JSON(VALID_JSON), ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS VALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(TRY_PARSE_JSON(INVALID_JSON), ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS INVALID_JSON_FLAG_TRUE,
JSON_EXTRACT_PATH_TEXT(INVALID_JSON, ARRAY_TO_STRING(['house', 'appliances', '"washing machine"', 'brand'], '.')) AS INVALID_JSON_FLAG_FALSE
;
VALID_JSON |
INVALID_JSON |
VALID_JSON_FLAG_DEFAULT_OFF |
VALID_JSON_FLAG_OFF |
VALID_JSON_FLAG_TRUE |
INVALID_JSON_FLAG_TRUE |
---|---|---|---|---|---|
- |
notvalidjson |
任意のブランド |
任意のブランド |
任意のブランド |
NULL |
変数をパスとして使用した入力コード:
SELECT
'appliances' level_2,
'brand' level_4,
JSON_EXTRACT_PATH_TEXT(
INFO.VALID_JSON,
'house',
level_2,
'washing machine',
level_4
) result
FROM
(
SELECT
'{
"house": {
"address": {
"street": "123 Any St.",
"city": "Any Town",
"state": "FL",
"zip": "32830"
},
"bathroom": {
"color": "green",
"shower": true
},
"appliances": {
"washing machine": {
"brand": "Any Brand",
"color": "beige"
},
"dryer": {
"brand": "Any Brand",
"color": "white"
}
}
}
}' AS VALID_JSON
) INFO;
level_2 |
level_4 |
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;
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])
サンプルソースパターン¶
入力コード:¶
SELECT FNV_HASH('John Doe') as FNV_HASH,
FNV_HASH('John Doe', 3) as FNV_HASH_SEED;
FNV_HASH |
FNV_HASH_SEED |
---|---|
-1568545727084176168 |
-5484851035903916490 |
出力コード:¶
SELECT
HASH('John Doe') as FNV_HASH,
HASH('John Doe') as FNV_HASH_SEED;
FNV_HASH |
FNV_HASH_SEED |
---|---|
3199932455444588441 |
3199932455444588441 |
注釈
Redshiftの FNV_HASH 関数ではシードパラメーターはオプションですが、Snowflakeのハッシュ関数ではシードパラメーターは FNV アルゴリズムでのみ使用されるため、使用されません。
既知の問題¶
既知の問題はありません。
関連 EWIs¶
既知の問題はありません。
条件付き関数¶
COALESCE¶
説明¶
一連の式のうち、nullではない最初の式の値を返します。Nullではない値が見つかると、リスト内の残りの式は評価されません。
詳しくは、 COALESCE 関数をご参照ください。
文法構文¶
COALESCE( expression, expression, ... )
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15));
INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2)
VALUES(1, 'Company_ABC', NULL, '555-01111'),
(2, 'Company_DEF', '555-01222', NULL),
(3, 'Company_HIJ', '555-01333', '555-01444'),
(4, 'Company_KLM', NULL, NULL);
SELECT COALESCE(phone_region_1, phone_region_2) IF_REGION_1_NULL,
COALESCE(phone_region_2, phone_region_1) IF_REGION_2_NULL
FROM suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
---|---|
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
null |
null |
出力コード:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO suppliers (supplier_id, supplier_name, phone_region_1, phone_region_2)
VALUES(1, 'Company_ABC', NULL, '555-01111'),
(2, 'Company_DEF', '555-01222', NULL),
(3, 'Company_HIJ', '555-01333', '555-01444'),
(4, 'Company_KLM', NULL, NULL);
SELECT COALESCE(phone_region_1, phone_region_2) IF_REGION_1_NULL,
COALESCE(phone_region_2, phone_region_1) IF_REGION_2_NULL
FROM
suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
---|---|
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
null |
null |
Related EWIs
既知の問題はありません。
GREATEST および LEAST
Description
任意の数の式のリストから最大値または最小値を返します。(Redshift SQL 言語リファレンス GREATEST および LEAST 関数)
Grammar Syntax
GREATEST (value [, ...])
LEAST (value [, ...])
この関数は Snowflake によって完全にサポートされています。
サンプルソースパターン¶
入力コード:¶
SELECT GREATEST(10, 20, NULL, 40, 30) AS greatest, LEAST(10, 20, NULL, 40, 30) AS least, GREATEST(NULL, NULL, NULL) AS nulls;
SELECT LEAST('GERMANY', 'USA') AS LEAST, GREATEST('GERMANY', 'USA') AS GREATEST;
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;
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 )
この関数は Snowflake によって完全にサポートされています。
Sample Source Patterns
Input Code:
SELECT NULLIF('first', 'second') AS different, NULLIF('first', 'first') AS same;
different |
same |
---|---|
first |
NULL |
出力コード:
SELECT NULLIF(RTRIM('first'), RTRIM('second')) AS different, NULLIF(RTRIM('first'), RTRIM('first')) AS same;
different |
same |
---|---|
first |
NULL |
Known Issues
既知の問題はありません。
Related EWIs
既知の EWIs はありません。
NVL
Description
一連の式のうち、nullではない最初の式の値を返します。Nullではない値が見つかると、リスト内の残りの式は評価されません。(Redshift SQL 言語 リファレンス NVL 関数)
RedShift では、 NVL は2つ以上の引数を含むことができますが、Snowflakeでは NVL 関数は2つの引数しか受け付けません。同じ動作をエミュレートするために、引数が3つ以上の NVL は、 COALESCE 関数に変換されます。
この関数は Snowflake によって完全にサポートされています。
文法構文¶
NVL( expression, expression, ... )
サンプルソースパターン¶
入力コード:¶
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15),
phone_region_3 VARCHAR(15));
INSERT INTO suppliers(supplier_id, supplier_name, phone_region_1, phone_region_2, phone_region_3)
VALUES(1, 'Company_ABC', NULL, '555-01111', NULL),
(2, 'Company_DEF', '555-01222', NULL, NULL),
(3, 'Company_HIJ', '555-01333', '555-01444', NULL),
(4, 'Company_KLM', NULL, NULL, NULL);
SELECT NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
NVL(phone_region_2, phone_region_1) IF_REGION_2_NULL,
NVL(phone_region_2, phone_region_1, phone_region_3) THREE_ARG_NVL
FROM suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
IF_REGION_3_NULL |
---|---|---|
555-01111 |
555-01111 |
555-01111 |
555-01222 |
555-01222 |
555-01222 |
555-01333 |
555-01444 |
555-01444 |
null |
null |
null |
出力コード:
CREATE TABLE suppliers (
supplier_id INT PRIMARY KEY,
supplier_name VARCHAR(30),
phone_region_1 VARCHAR(15),
phone_region_2 VARCHAR(15),
phone_region_3 VARCHAR(15))
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/26/2024", "domain": "test" }}';
INSERT INTO suppliers (supplier_id, supplier_name, phone_region_1, phone_region_2, phone_region_3)
VALUES(1, 'Company_ABC', NULL, '555-01111', NULL),
(2, 'Company_DEF', '555-01222', NULL, NULL),
(3, 'Company_HIJ', '555-01333', '555-01444', NULL),
(4, 'Company_KLM', NULL, NULL, NULL);
SELECT NVL(phone_region_1, phone_region_2) IF_REGION_1_NULL,
NVL(phone_region_2, phone_region_1) IF_REGION_2_NULL,
COALESCE(phone_region_2, phone_region_1, phone_region_3) THREE_ARG_NVL
FROM
suppliers
ORDER BY supplier_id;
IF_REGION_1_NULL |
IF_REGION_2_NULL |
|
---|---|---|
555-01111 |
555-01111 |
|
555-01222 |
555-01222 |
|
555-01333 |
555-01444 |
|
null |
null |
既知の問題¶
既知の問題はありません。
関連 EWIs¶
既知の問題はありません。
日付と時刻の関数¶
CONVERT_TIMEZONE¶
説明¶
Amazon Redshiftの CONVERT_TIMEZONE
関数は、タイムスタンプをあるタイムゾーンから別のタイムゾーンに変換します。元のタイムゾーン、ターゲットタイムゾーン、変換するタイムスタンプを指定します。異なるリージョン間の正確な時間管理に役立ちます
文法構文¶
CONVERT_TIMEZONE(source_timezone, target_timezone, timestamp)
サンプルソースパターン¶
入力コード:¶
SELECT
GETDATE(),
CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE()) AS london_time,
CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', GETDATE()) AS tokyo_time;
getdate |
london_time |
tokyo_time |
---|---|---|
2024-10-02 16:14:55.000000 |
2024-10-02 17:14:55.000000 |
2024-10-03 01:14:55.000000 |
出力コード:¶
SELECT
GETDATE(),
CONVERT_TIMEZONE('UTC', 'Europe/London', GETDATE()) AS london_time,
CONVERT_TIMEZONE('UTC', 'Asia/Tokyo', GETDATE()) AS tokyo_time;
getdate |
london_time |
tokyo_time |
---|---|---|
2024-10-02 09:18:43.848 |
2024-10-02 10:17:35.351 |
2024-10-02 18:17:35.351 |
関連 EWIs¶
既知の問題はありません。
CURRENT_DATE¶
説明¶
CURRENT_DATE は、現在のセッションのタイムゾーン(UTC がデフォルト)の日付をデフォルトの形式で返します: YYYY-MM-DD。(RedShift SQL 言語リファレンス CURRENT_୧DATE)
文法構文¶
CURRENT_DATE
サンプルソースパターン¶
入力コード:¶
SELECT CURRENT_DATE;
DATE |
---|
2024-09-22 |
出力コード:¶
SELECT
CURRENT_DATE();
DATE_T |
---|
2024-09-22 |
推奨事項¶
推奨事項はありません。
関連 EWIs¶
既知の問題はありません。
DATE¶
説明¶
この関数は、入力式を日付に変換します。
この関数は Snowflake で完全にサポートされています。
関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください。
Grammar Syntax
DATE(<expr>)
Sample Source Patterns
Input Code:
SELECT DATE('2024-02-02 04:05:06.789');
SELECT "DATE"("GETDATE"());
SELECT "date"('2024-02-02 04:05:06.789');
DATE('2024-02-02 04:05:06.789') |
---|
2024-02-02 |
"DATE"("GETDATE"()) |
---|
2024-11-20 |
"date"('2024-02-02 04:05:06.789') |
---|
2024-02-02 |
Output Code:
SELECT DATE('2024-02-02 04:05:06.789');
SELECT DATE(GETDATE());
SELECT DATE('2024-02-02 04:05:06.789');
DATE('2024-02-02 04:05:06.789') |
---|
2024-02-02 |
"DATE"("GETDATE"()) |
---|
2024-11-20 |
"DATE"('2024-02-02 04:05:06.789') |
---|
2024-02-02 |
Known Issues
問題は見つかりませんでした。
Related EWIs
既知の問題はありません。
DATE_ADD
Description
Amazon Redshiftの DATE_ADD
関数は、日付またはタイムスタンプに指定した時間間隔を追加します。datetimepart
は間隔のタイプ('day'
や 'month'
のような)、 interval
は追加する単位数(正または負)、 timestamp
は元の日付です。
DATE_ADD
は DATEADD
に変換されます。この変換に関する詳しい情報は こちらをクリックしてください。
Snowflakeの DATE_ADD
に有効なdatepart
:
マイクロ秒、マイクロ秒
ミリ秒、ミリ秒
秒、秒
分、分
時間、時間
日、日
week
月、月
四半期、四半期
年、年
Snowflakeの DATE_ADD
でサポートされていない形式:
weeks
10年、10年
世紀、世紀
1000年、1000年
Grammar Syntax
DATE_ADD( datetimepart, interval, timestamp )
Sample Source Patterns
Input Code:
SELECT DATE_ADD('day', 10, '2024-11-01'), DATE_ADD('month', 3, '2024-11-01');
SELECT "DATE_ADD"('DAYS',18,'2008-02-28');
date_add |
date_add |
---|---|
2024-11-11 00:00:00.000000 |
2025-02-01 00:00:00.000000 |
"date_add" |
---|
2008-03-17 00:00:00.000000 |
Output Code:
SELECT
DATEADD('day', 10, '2024-11-01'),
DATEADD('month', 3, '2024-11-01');
SELECT
DATEADD('DAYS',18,'2008-02-28');
DATEADD |
DATEADD |
---|---|
2024-11-11 00:00:00.000 |
2025-02-01 00:00:00.000 |
DATEADD |
---|
2008-03-17 00:00:00.000 |
Know Issues
問題は見つかりませんでした。
Related EWIs
既知の問題はありません。
DATE_DIFF
Description
DATEDIFF は、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} )
この関数は 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;
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;
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})
警告
この関数は Snowflake によって部分的にサポートされています。
サンプルソースパターン¶
入力コード:¶
SELECT DATE_PART(minute, timestamp '2023-01-04 04:05:06.789') AS dateMinute,
PGDATE_PART(dayofweek, timestamp '2022-05-02 04:05:06.789') AS dateDayofweek,
"DATE_PART"('month', date '2022-05-02') AS dateMonth,
pgdate_part('weeks'::text, '2023-02-28'::date::timestamp without time zone) AS wks;
SELECT DATE_PART(weeks, date '2023-02-28') AS wks,
DATE_PART(decade, date '2023-02-28') AS dec,
PGDATE_PART(century, date '2023-02-28') AS cen;
dateMinute |
dateDayofweek |
dateMonth |
wks |
---|---|---|---|
5 |
1 |
5 |
9 |
出力コード:¶
SELECT
DATE_PART(minute, timestamp '2023-01-04 04:05:06.789') AS dateMinute,
DATE_PART(dayofweek, timestamp '2022-05-02 04:05:06.789') AS dateDayofweek,
DATE_PART('month', date '2022-05-02') AS dateMonth,
DATE_PART(week, '2023-02-28'::date:: TIMESTAMP_NTZ) AS wks;
SELECT
DATE_PART(week, date '2023-02-28') AS wks,
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - decade FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
DATE_PART(decade, date '2023-02-28') AS dec,
!!!RESOLVE EWI!!! /*** SSC-EWI-PG0005 - century FORMAT MAY FAIL OR MAY HAVE A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/!!!
DATE_PART(century, date '2023-02-28') AS cen;
dateMinute |
dateDayofweek |
dateMonth |
wks |
---|---|---|---|
5 |
1 |
5 |
9 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-EWI-PGOOO5: 現在の日付/数値形式はSnowflakeでは動作が異なる可能性があります。
DATE_TRUNC¶
説明¶
DATE_TRUNC 関数は、時間、日、月など指定した日付部分に基づいてタイムスタンプ式またはリテラルを切り捨てます。
(Redshift SQL 言語リファレンス DATE_TRUNC 関数)。
Snowflake では、この関数は DATE、 TIME、または TIMESTAMP の値を指定された精度で切り捨てます。
Snowflakeで有効な<datepart> :
マイクロ秒、マイクロ秒
ミリ秒、ミリ秒
秒、秒
分、分
時間、時間
日、日
week
月、月
四半期、四半期
年、年
Snowflakeの無効な形式:
週
10年、10年
世紀、世紀
1000年、1000年
この関数は Snowflake で完全にサポートされています。
関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください。
Grammar Syntax
DATE_TRUNC('datepart', timestamp)
Sample Source Patterns
サポートされている日付部分
Input Code:
SELECT
DATE_TRUNC('second', TIMESTAMP '2024-02-02 04:05:06.789') AS sec,
DATE_TRUNC('hours', TIMESTAMP '2024-02-02 04:05:06.789') AS hrs,
DATE_TRUNC('week', TIMESTAMP '2024-02-02 04:05:06.789') AS wk,
"DATE_TRUNC"('month', TIMESTAMP '2024-02-02 04:05:06.789') AS mth,
"date_trunc"('quarters', TIMESTAMP '2024-02-02 04:05:06.789') AS qtr,
date_trunc('second'::text, '2024-02-02 04:05:06.789'::timestamp without time zone) AS sec2;
SEC | HRS | WK | MTH | QTR | SEC2 |
---|---|---|---|---|---|
2024-02-02 04:05:06.000000 | 2024-02-02 04:00:00.000000 | 2024-01-29 00:00:00.000000 | 2024-02-01 00:00:00.000000 | 2024-01-01 00:00:00.000000 | 2024-02-02 04:05:06.000000 |
Output Code:
SELECT
DATE_TRUNC('second', TIMESTAMP '2024-02-02 04:05:06.789') AS sec,
DATE_TRUNC('hours', TIMESTAMP '2024-02-02 04:05:06.789') AS hrs,
DATE_TRUNC('week', TIMESTAMP '2024-02-02 04:05:06.789') AS wk,
DATE_TRUNC('month', TIMESTAMP '2024-02-02 04:05:06.789') AS mth,
DATE_TRUNC('quarters', TIMESTAMP '2024-02-02 04:05:06.789') AS qtr,
date_trunc('second','2024-02-02 04:05:06.789':: TIMESTAMP_NTZ) AS sec2;
SEC | HRS | WK | MTH | QTR | SEC2 |
---|---|---|---|---|---|
2024-02-02 04:05:06.000 | 2024-02-02 04:00:00.000 | 2024-01-29 00:00:00.000 | 2024-02-01 00:00:00.000 | 2024-01-01 00:00:00.000 | 2024-02-02 04:05:06.000000 |
無効な日付部分
この変換は、以下の日付部分のRedshiftの動作をエミュレートするために実行されます
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;
WKS |
DEC |
C |
M |
---|---|---|---|
1990-01-29 00:00:00.000000 |
1990-01-01 00:00:00.000000 |
1901-01-01 00:00:00.000000 |
1001-01-01 00:00:00.000000 |
Output Code:
SELECT
DATE_TRUNC(week, TIMESTAMP '1990-02-02 04:05:06.789') AS wks,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789')) % 10, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS dec,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789') - 1) % 100, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS c,
DATEADD(year, -(EXTRACT(year FROM TIMESTAMP '1990-02-02 04:05:06.789') - 1) % 1000, DATE_TRUNC(year, TIMESTAMP '1990-02-02 04:05:06.789')) AS m;
WKS |
DEC |
C |
M |
---|---|---|---|
1990-01-29 00:00:00.000 |
1990-01-01 00:00:00.000 |
1901-01-01 00:00:00.000 |
1001-01-01 00:00:00.000 |
詳細情報については、Snowflakeの以下のドキュメントを参照してください。
Known Issues
Amazon Redshiftでは、タイムスタンプのデフォルトの精度は6桁(マイクロ秒)ですが、Snowflakeではデフォルトの精度は9桁(ナノ秒)です。このような精度の違いがあるため、タイムスタンプを使用する際には、特定のニーズを考慮することが重要です。どちらのプラットフォームでも異なる精度が必要な場合は、以下のオプションを使用できます。
ALTER SESSION の使用:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
DATE_TRUNC()で取得した値を格納するデータ型によっては、精度に制限があり、精度が低下する可能性がありますのでご注意ください。
Related EWIs
既知の問題はありません。
DATEADD
Description
DATE、 TIME、 TIMETZ、または TIMESTAMP の値を指定の間隔だけインクリメントします。
(RedShift SQL 言語リファレンス 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)
Sample Source Patterns
サポートされている日付部分:
Input Code:
SELECT dateadd(year, 1, '2024-02-29') AS D1, dateadd(year, 1, '2023-02-28') AS D2
date_add('year'::text, 1::bigint, '2024-02-29 00:00:00'::timestamp without time zone) AS D3;
D1 |
D2 |
D3 |
---|---|---|
2025-03-01 00:00:00.000000 |
2024-02-28 00:00:00.000000 |
2025-03-01 00:00:00.000000 |
Output Code:
SELECT
DATEADD(day, 1, dateadd(year, 1, '2024-02-29')) AS D1,
DATEADD(year, 1, '2023-02-28') AS D2,
DATEADD('year', 1, '2024-02-29 00:00:00':: TIMESTAMP_NTZ) AS D3;
D1 |
D2 |
D3 |
---|---|---|
2025-03-01 00:00:00.000 |
2024-02-28 00:00:00.000 |
2025-03-01 00:00:00.000000 |
サポートされていない日付部分
この変換は、以下の日付部分のRedshiftの動作をエミュレートするために実行されます
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
);
wks |
dec |
cen |
mill |
---|---|---|---|
2023-03-07 00:00:00.000000 |
2033-02-28 00:00:00.000000 |
2123-02-28 00:00:00.000000 |
3023-02-28 00:00:00.000000 |
Output Code:
SELECT
DATEADD(week, 1, '2023-02-28') AS wks,
DATEADD(YEAR, 1 * 10, '2023-02-28') AS dec,
DATEADD(YEAR, 1 * 100, '2023-02-28') AS cen,
DATEADD(YEAR, 1 * 1000, '2023-02-28') AS mill;
SELECT
DATEADD(YEAR, num_interval * 1000, '2023-02-28') AS result
FROM (
SELECT 5 AS num_interval
);
wks |
dec |
cen |
mill |
---|---|---|---|
2023-03-07 00:00:00.000000 |
2033-02-28 00:00:00.000000 |
2123-02-28 00:00:00.000000 |
3023-02-28 00:00:00.000000 |
注意
Amazon Redshiftでは、 DATEADD
を使ってうるう年の2月29日に年を追加すると、翌年はうるう年ではないため、翌年の3月1日にロールオーバーされます。Redshiftは、最も近い有効な日付に移動することで、日付の演算を処理します。うるう年以外の年には2月29日が存在しないため、デフォルトは3月1日となります。例えば、2020年2月29日に1年足すと、2021年3月1日となります。
Related EWIs
既知の問題はありません。
DATEDIFF
Description
DATEDIFF は、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} )
この関数は 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;
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;
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()
Sample Source Patterns
Input Code:
CREATE TABLE table1 (
id INTEGER,
date_t DATE DEFAULT getdate(),
time_t TIME DEFAULT "getdate"(),
timestamp_t TIMESTAMP DEFAULT "GETDATE"(),
timestamptz_t TIMESTAMPTZ DEFAULT getdate()
);
INSERT INTO table1(id) VALUES (1);
SELECT * FROM table1;
ID |
DATE_T |
TIME_T |
TIMESTAMP_T |
TIMESTAMPTZ_T |
---|---|---|---|---|
1 |
2024-11-20 |
17:51:00 |
2024-11-20 17:51:00.000000 |
2024-11-20 17:51:00.000000 +00:00 |
Output Code:
CREATE TABLE table1 (
id INTEGER,
date_t DATE DEFAULT getdate() :: DATE,
time_t TIME DEFAULT GETDATE() :: TIME,
timestamp_t TIMESTAMP DEFAULT GETDATE(),
timestamptz_t TIMESTAMP_TZ DEFAULT getdate()
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/20/2024", "domain": "test" }}';
INSERT INTO table1 (id) VALUES (1);
SELECT * FROM
table1;
ID |
DATE_T |
TIME_T |
TIMESTAMP_T |
TIMESTAMPTZ_T |
---|---|---|---|---|
1 |
2024-11-20 |
17:51:00 |
2024-11-20 17:51:00.000 |
2024-11-20 17:51:00.000 +0000 |
Known Issues
Amazon Redshiftでは、タイムスタンプのデフォルトの精度は6桁(マイクロ秒)ですが、Snowflakeではデフォルトの精度は9桁(ナノ秒)です。このような精度の違いがあるため、タイムスタンプを使用する際には、特定のニーズを考慮することが重要です。どちらのプラットフォームでも異なる精度が必要な場合は、以下のオプションを使用できます。
ALTER SESSION の使用:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
GETDATE()で取得した値を格納するデータ型によっては、精度に制限があり、精度が低下する可能性がありますのでご注意ください。
Related EWIs
既知の問題はありません。
TIMESTAMP
Description
TIMESTAMP 関数は、文字列値をタイムスタンプにキャストするシステム関数です。
この関数は Snowflake で完全にサポートされています。
文法構文¶
select "timestamp"(VARCHAR);
サンプルソースパターン¶
入力コード:¶
select "timestamp"('2024-03-01 3:22:33');
"timestamp" |
---|
2024-03-01 03:22:33.000000 |
出力コード:
select
TO_TIMESTAMP('2024-03-01 3:22:33');
TO_TIMESTAMP |
---|
2024-03-01 03:22:33.000 |
既知の問題¶
Amazon Redshiftでは、タイムスタンプのデフォルトの精度は6桁(マイクロ秒)ですが、Snowflakeではデフォルトの精度は9桁(ナノ秒)です。このような精度の違いがあるため、タイムスタンプを使用する際には、特定のニーズを考慮することが重要です。どちらのプラットフォームでも異なる精度が必要な場合は、以下のオプションを使用できます。
ALTER SESSION の使用:
--This example is for 2 digits for precision (FF2).
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF2';
GETDATE()で取得した値を格納するデータ型によっては、精度に制限があり、精度が低下する可能性がありますのでご注意ください。
関連 EWIs¶
既知の問題はありません。
TRUNC¶
説明¶
TIMESTAMP
を切り捨てて、 DATE
を返します。
詳しくは、 TRUNC 関数をご参照ください。
文法構文¶
TRUNC(timestamp)
注釈
この関数は Snowflake によってサポートされています。しかしSnowflakeでは、 DATE、 TIME、または TIMESTAMP の値を指定された精度で切り捨てます。
サンプルソースパターン¶
入力コード:¶
CREATE TABLE test_date_trunc (
mytimestamp TIMESTAMP,
mydate DATE,
mytimestamptz TIMESTAMPTZ
);
INSERT INTO test_date_trunc VALUES (
'2024-05-09 08:50:57.891 -0700',
'2024-05-09',
'2024-05-09 08:50:57.891 -0700');
SELECT TRUNC(mytimestamp) AS date1,
TRUNC(mydate) AS date2,
TRUNC(mytimestamptz::TIMESTAMP) AS date3,
TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP) AS date4,
TRUNC('2024-05-09 08:50:57.891 -0700'::DATE) AS date5,
CAST(TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP) AS TIMESTAMP) AS date6
FROM test_date_trunc;
DATE1 |
DATE2 |
DATE3 |
DATE4 |
DATE5 |
DATE6 |
---|---|---|---|---|---|
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 00:00:00.000 |
出力コード:
CREATE TABLE test_date_trunc (
mytimestamp TIMESTAMP,
mydate DATE,
mytimestamptz TIMESTAMP_TZ
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/13/2024", "domain": "test" }}';
INSERT INTO test_date_trunc
VALUES (
'2024-05-09 08:50:57.891 -0700',
'2024-05-09',
'2024-05-09 08:50:57.891 -0700');
SELECT
DATE( TRUNC(mytimestamp, 'day')) AS date1,
DATE(
TRUNC(mydate, 'day')) AS date2,
DATE(
TRUNC(mytimestamptz::TIMESTAMP, 'day')) AS date3,
DATE(
TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP, 'day')) AS date4,
DATE(
TRUNC('2024-05-09 08:50:57.891 -0700'::DATE, 'day')) AS date5,
CAST(DATE(TRUNC('2024-05-09 08:50:57.891 -0700'::TIMESTAMP, 'day')) AS TIMESTAMP) AS date6
FROM
test_date_trunc;
DATE1 |
DATE2 |
DATE3 |
DATE4 |
DATE5 |
DATE6 |
---|---|---|---|---|---|
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 |
2024-05-09 00:00:00.000 |
関連 EWIs¶
既知の問題はありません。
ウィンドウ関数¶
AVG¶
説明¶
AVG ウィンドウ関数は、入力式値の平均(算術平均)を返します。
(Redshift SQL 言語リファレンス AVG 関数)
この関数は Snowflake で完全にサポートされています。
関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください。
Grammar Syntax
AVG ( [ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list
frame_clause ]
)
Sample Source Patterns
Setup data
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column SUPER
);
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
CREATE TABLE example_table (
my_smallint_column SMALLINT,
my_integer_column INTEGER,
my_bigint_column BIGINT,
my_numeric_column NUMERIC,
my_decimal_column DECIMAL,
my_real_column REAL,
my_double_precision_column DOUBLE PRECISION,
my_super_column VARIANT
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "11/27/2024", "domain": "test" }}';
INSERT INTO example_table (
my_smallint_column,
my_integer_column,
my_bigint_column,
my_numeric_column,
my_decimal_column,
my_real_column,
my_double_precision_column,
my_super_column
)
VALUES
(1, 100, 10000000000, 123.45, 678.90, 3.14, 2.71828, 123),
(2, 200, 20000000000, 234.56, 789.01, 2.71, 3.14159, 456),
(3, 300, 30000000000, 345.67, 890.12, 1.41, 1.61803, 789),
(4, 400, 40000000000, 456.78, 901.23, 1.61, 1.41421, 101112),
(5, 500, 50000000000, 567.89, 123.45, 2.17, 3.14159, 131415);
Input Code:
SELECT
my_smallint_column,
AVG(my_integer_column) OVER (PARTITION BY my_smallint_column) AS avg_integer_column,
AVG(my_numeric_column) OVER () AS avg_numeric_column_all,
AVG(my_decimal_column) OVER (PARTITION BY my_smallint_column ORDER BY my_integer_column ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_avg_decimal_column
FROM
example_table
ORDER BY my_smallint_column
LIMIT 3;
my_smallint_column | avg_integer_column | avg_numeric_column_all | cumulative_avg_decimal_column |
---|---|---|---|
1 | 100 | 345 | 679 |
2 | 200 | 345 | 789 |
3 | 300 | 345 | 890 |
Output Code:
SELECT
my_smallint_column,
AVG(my_integer_column) OVER (PARTITION BY my_smallint_column) AS avg_integer_column,
AVG(my_numeric_column) OVER () AS avg_numeric_column_all,
AVG(my_decimal_column) OVER (PARTITION BY my_smallint_column ORDER BY my_integer_column ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_avg_decimal_column
FROM
example_table
ORDER BY my_smallint_column
LIMIT 3;
my_smallint_column | avg_integer_column | avg_numeric_column_all | cumulative_avg_decimal_column |
---|---|---|---|
1 | 100 | 345 | 679 |
2 | 200 | 345 | 789 |
3 | 300 | 345 | 890 |
Note
AVG は、データ型に応じて、丸めや形式化に関して異なる動作をする可能性があり、RedshiftとSnowflakeを比較すると、精度や小数点以下の桁数が異なる場合があります。
Related EWIs
既知の問題はありません。
COUNT
Description
COUNT ウィンドウ関数は、式で定義された行を数えます。
(Redshift SQL 言語リファレンス COUNT 関数)
この関数は Snowflake で完全にサポートされています。
関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください。
文法構文¶
COUNT ( * | [ ALL ] expression) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
サンプルソースパターン¶
セットアップデータ¶
CREATE TABLE sales_data (
sale_id INT,
product_id INT,
sale_date DATE,
amount DECIMAL(10, 2)
);
INSERT INTO sales_data (sale_id, product_id, sale_date, amount) VALUES
(1, 101, '2024-01-01', 200.00),
(2, 102, '2024-01-02', 150.00),
(3, 101, '2024-01-03', 300.00),
(4, 101, '2024-01-03', 250.00),
(5, 103, '2024-01-04', 450.00),
(6, 102, '2024-01-05', 100.00),
(7, 104, '2024-01-05', 500.00),
(8, 101, '2024-01-06', 350.00);
入力コード:¶
SELECT
product_id,
COUNT(ALL amount) OVER (PARTITION BY product_id) AS count_all_amount,
"count"(*) OVER() AS total_sales,
"COUNT"(*) OVER (PARTITION BY product_id ORDER BY sale_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_count
FROM
sales_data
ORDER BY product_id;
PRODUCT_ID | COUNT_ALL_AMOUNT | TOTAL_SALES | CUMULATIVE_COUNT |
---|---|---|---|
101 | 4 | 8 | 1 |
101 | 4 | 8 | 2 |
101 | 4 | 8 | 3 |
101 | 4 | 8 | 4 |
102 | 2 | 8 | 1 |
102 | 2 | 8 | 2 |
103 | 1 | 8 | 1 |
104 | 1 | 8 | 1 |
出力コード:¶
SELECT
product_id,
COUNT(ALL amount) OVER (PARTITION BY product_id) AS count_all_amount,
COUNT(*) OVER() AS total_sales,
COUNT(*) OVER (PARTITION BY product_id ORDER BY sale_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_count
FROM
sales_data
ORDER BY product_id;
PRODUCT_ID | COUNT_ALL_AMOUNT | TOTAL_SALES | CUMULATIVE_COUNT |
---|---|---|---|
101 | 4 | 8 | 1 |
101 | 4 | 8 | 2 |
101 | 4 | 8 | 3 |
101 | 4 | 8 | 4 |
102 | 2 | 8 | 1 |
102 | 2 | 8 | 2 |
103 | 1 | 8 | 1 |
104 | 1 | 8 | 1 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
既知の問題はありません。
DENSE_RANK¶
説明¶
DENSE_୧RANK ウィンドウ関数は、 OVER 句の ORDER BY 式に基づいて、値のグループにおける値のランクを決定します。DENSE_RANK 関数が RANK と異なる点は、2つ以上の行が同値の場合、ランク付けされた値のシーケンスにギャップがないことです。
詳しくは DENSE_RANK関数をご参照ください。
文法構文¶
DENSE_RANK() OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
注釈
この関数はSnowflakeによってサポートされています。しかし、 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;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
4 |
2 |
1 |
1 |
出力コード:
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT DENSE_RANK() OVER (ORDER BY bushels DESC) AS rank1,
DENSE_RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
DENSE_RANK()
OVER (
ORDER BY 1) AS rank3,
DENSE_RANK()
OVER (PARTITION BY state
ORDER BY 1) AS rank4
FROM
corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
4 |
2 |
1 |
1 |
関連 EWIs¶
既知の問題はありません。
LEAD¶
説明¶
LEAD ウィンドウ関数は、パーティション内の現在の行の下(後)にある、指定されたオフセットの行の値を返します。
(Redshift SQL 言語リファレンス LEAD ウィンドウ関数)
警告
この関数は Snowflake で部分的にサポートされています。Redshiftでは、オフセットは定数の整数または整数に評価される式にすることができます。Snowflakeでは、定数にしかできないという制限があります。
関数内の引用符で囲まれた識別子についての詳しい情報は、 ここをクリックしてください。
文法構文¶
LEAD (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
サンプルソースパターン¶
セットアップデータ¶
CREATE TABLE sales (
sale_id INT,
customer_id INT,
sale_date DATE,
sale_amount DECIMAL(10, 2)
);
INSERT INTO sales (sale_id, customer_id, sale_date, sale_amount)
VALUES
(1, 301, '2024-01-01', 150.00),
(2, 301, '2024-01-02', NULL),
(3, 301, '2024-01-03', 250.00),
(4, 301, '2024-01-04', 350.00),
(5, 302, '2024-02-01', 100.00),
(6, 302, '2024-02-02', 200.00),
(7, 302, '2024-02-03', NULL),
(8, 302, '2024-02-04', 300.00);
入力コード:¶
SELECT
LEAD(sale_amount) OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead,
LEAD(sale_amount, 2) RESPECT NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_respect_null,
LEAD(sale_amount, 1) IGNORE NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_ignore_nulls
FROM sales;
LEAD |
LEAD_RESPECT_NULL |
LEAD_IGNORE_NULLS |
---|---|---|
200.00 |
null |
200.00 |
null |
300.00 |
300.00 |
300.00 |
null |
300.00 |
null |
null |
null |
null |
250.00 |
250.00 |
250.00 |
350.00 |
250.00 |
350.00 |
null |
350.00 |
null |
null |
null |
出力コード:¶
SELECT
LEAD(sale_amount) OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead,
LEAD(sale_amount, 2) RESPECT NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_respect_null,
LEAD(sale_amount, 1) IGNORE NULLS OVER (PARTITION BY customer_id ORDER BY sale_date) AS lead_ignore_nulls
FROM sales;
LEAD |
LEAD_RESPECT_NULL |
LEAD_IGNORE_NULLS |
---|---|---|
200.00 |
null |
200.00 |
null |
300.00 |
300.00 |
300.00 |
null |
300.00 |
null |
null |
null |
null |
250.00 |
250.00 |
250.00 |
350.00 |
250.00 |
350.00 |
null |
350.00 |
null |
null |
null |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
既知の問題はありません。
RANK¶
説明¶
୧RANK ウィンドウ関数は、 OVER 句の ORDER BY 式に基づいて、値のグループにおける値のランクを決定します。オプションの PARTITION BY 句がある場合、順位は行のグループごとにリセットされます。
詳しくは RANK関数をご参照ください。
文法構文¶
RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
注釈
この関数はSnowflakeによってサポートされています。しかし、 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;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
5 |
2 |
1 |
1 |
出力コード:
CREATE TABLE corn_production
(
farmer_ID INTEGER,
state varchar,
bushels float
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": { "major": 0, "minor": 0, "patch": "0" }, "attributes": { "component": "redshift", "convertedOn": "09/27/2024" }}';
INSERT INTO corn_production (farmer_ID, state, bushels) VALUES
(1, 'Iowa', 100),
(2, 'Iowa', 110),
(3, 'Kansas', 120),
(4, 'Kansas', 130),
(5, 'Kansas', 110);
SELECT RANK() OVER (ORDER BY bushels DESC) AS rank1,
RANK() OVER (PARTITION BY state ORDER BY bushels DESC) AS rank2,
RANK()
OVER (
ORDER BY 1) AS rank3,
RANK()
OVER (PARTITION BY state
ORDER BY 1) AS rank4
FROM
corn_production;
rank1 |
rank2 |
rank3 |
rank4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
1 |
1 |
3 |
3 |
1 |
1 |
3 |
1 |
1 |
1 |
5 |
2 |
1 |
1 |
関連 EWIs¶
既知の問題はありません。
ROW_NUMBER¶
説明¶
ROW_NUMBER ウィンドウ関数は、 OVER 句の ORDER BY 式に基づいて、行グループ内の現在の行の序数を1から数えて割り当てます。(RedShift SQL 言語リファレンス ROW_NUMBER ウィンドウ関数)
文法構文¶
ROW_NUMBER() OVER(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
この関数は 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);
Input Code:
SELECT ROW_NUMBER() OVER ( ORDER BY bushels DESC) AS row1,
ROW_NUMBER() OVER ( PARTITION BY state ORDER BY bushels DESC) AS row2,
ROW_NUMBER() OVER () AS row3,
ROW_NUMBER() OVER ( PARTITION BY state) AS row4
FROM corn_production;
ROW1 |
ROW2 |
ROW3 |
ROW4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
4 |
3 |
3 |
3 |
3 |
1 |
4 |
1 |
5 |
2 |
5 |
2 |
出力コード:
SELECT ROW_NUMBER() OVER ( ORDER BY bushels DESC) AS row1,
ROW_NUMBER() OVER ( PARTITION BY state ORDER BY bushels DESC) AS row2,
ROW_NUMBER()
OVER (
ORDER BY
1) AS row3,
ROW_NUMBER()
OVER ( PARTITION BY state
ORDER BY
1) AS row4
FROM
corn_production;
ROW1 |
ROW2 |
ROW3 |
ROW4 |
---|---|---|---|
1 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
4 |
3 |
3 |
3 |
3 |
1 |
4 |
1 |
5 |
2 |
5 |
2 |
Known Issues
問題は見つかりませんでした。
Related EWIs
既知の問題はありません。