SnowConvert AI - Oracle - Oracle組み込みデータ型¶
拡張データ型¶
説明¶
Oracle Database 12_c_ 以降、
VARCHAR2、NVARCHAR2、RAWデータ型に最大サイズ32767バイトを指定できます。データベースがこの新しい最大サイズをサポートするかどうかは、初期化パラメーターMAX_STRING_SIZEをセットすることで制御できます。宣言されたサイズが4000バイトを超える
VARCHAR2またはNVARCHAR2データ型、または宣言されたサイズが2000バイトを超えるRAWデータ型は、 拡張 データ 型 です。(Oracle SQL 言語リファレンス拡張データ型)。
Oracleでは、データベースの最大文字列サイズを STANDARD から EXTENDED に増やすことができますが、Snowflakeにはこの機能に 相当するものがありません。
したがって、 VARCHAR2 、 NVARCHAR2 、 RAW 拡張データ型はSnowflakeではサポートされておらず、通常の VARCHAR2 、 NVARCHAR2 、 RAW データ型と同様に変換されます。詳しくは 文字データ型 と RAWデータ型 を確認してください。
既知の問題¶
1.MAX STRING SIZE は認識されません¶
ALTER SYSTEM SET MAX_STRING_SIZE='EXTENDED';
SnowConvert で解析されていません。
JSON データ型¶
説明¶
Oracle Databaseは、トランザクション、インデックス、宣言型クエリ、ビューなど、リレーショナルデータベースの機能で JSON をネイティブにサポートしています。リレーショナルデータとは異なり、 JSON データは、データを定義するスキーマを必要とせずに、データベースに格納し、インデックスを作成し、クエリを実行することができます。(Oracle SQL 言語リファレンス JSON データ型)。
Oracleの動作をエミュレートするために、 JSON データ型は VARIANT に変換されます。
JSON
サンプルソースパターン¶
テーブル作成の列としての JSON データ型¶
Oracle¶
CREATE TABLE jsontable (
json_column JSON
);
INSERT INTO jsontable VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable VALUES('{"stringdata": "this is a text","number": 1,"numberNeg": -1,"booleanT": true,"booleanGF": false,"nullvalue": null,"object": {"1": 1,"2": 2},"array": [1, 2, 3]}');
INSERT INTO jsontable VALUES(JSON('{"id": 4}'));
SELECT * FROM jsontable;
結果¶
COL1 |
|---|
{"id":1,"content":"json content"} |
{"stringdata":"this is a text","number":1,"numberNeg":-1,"booleanT":true,"booleanGF":false,"nullvalue":null,"object":{"1":1,"2":2},"array":[1,2,3]} |
{"id":4} |
Snowflake¶
CREATE OR REPLACE TABLE jsontable (
json_column VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO jsontable
VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable
VALUES('{"stringdata": "this is a text","number": 1,"numberNeg": -1,"booleanT": true,"booleanGF": false,"nullvalue": null,"object": {"1": 1,"2": 2},"array": [1, 2, 3]}');
INSERT INTO jsontable
VALUES(JSON('{"id": 4}') !!!RESOLVE EWI!!! /*** SSC-EWI-0073 - PENDING FUNCTIONAL EQUIVALENCE REVIEW FOR 'JSON' NODE ***/!!!);
SELECT * FROM
jsontable;
警告
JSONデータ挿入が正しく処理されていません。回避策については、 推奨事項 セクションを確認してください。
既知の問題¶
1.JSON データ挿入
JSON データの挿入が SnowConvert によって正しく処理されていません。
2.JSON オブジェクト操作
JSONオブジェクト(列、変数、パラメーター)の使用法は、SnowConvert AIによって正しく変換されていません。回避策については、 推奨事項 セクションを確認してください。
推奨事項¶
1.JSON データ型 翻訳の回避策¶
JSON データ型は VARIANT に変換されるため、Snowflake PARSE_JSON 関数を使用して情報を形式化できます。このアプローチでは、Oracleと同様の構文を使用して、Snowflakeで JSON データの保存、クエリ、操作を行うことができます。
Oracle¶
CREATE TABLE jsontable (
json_column JSON
);
INSERT INTO jsontable VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable VALUES('{"id": 2, "content": {"header": "header text one", "content": "content text one"}}');
INSERT INTO jsontable VALUES('{"id": 3, "content": {"header": "header tex two", "content": "content text two"}}');
SELECT * FROM jsontable;
SELECT 'ID: ' || jt.json_column.id, 'HEADER: ' || UPPER(jt.json_column.content.header) FROM jsontable jt;
結果1¶
JSON_SERIALIZE(JSON_COLUMN) |
|---|
{"id":1,"content":"json content"} |
{"id":2,"content":{"header":"header text one","content":"content text one"}} |
{"id":3,"content":{"header":"header tex two","content":"content text two"}} |
結果2¶
'ID:' JT.JSON_COLUMN.ID |
'HEADER:' UPPER(JT.JSON_COLUMN.CONTENT.HEADER) |
|---|---|
ID:1 |
HEADER: |
ID:2 |
HEADER: "HEADER TEXT ONE" |
ID:3 |
HEADER: "HEADER TEX TWO" |
Snowflake¶
CREATE OR REPLACE TABLE jsontable (
json_column VARIANT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO jsontable
VALUES('{"id": 1, "content":"json content"}');
INSERT INTO jsontable
VALUES('{"id": 2, "content": {"header": "header text one", "content": "content text one"}}');
INSERT INTO jsontable
VALUES('{"id": 3, "content": {"header": "header tex two", "content": "content text two"}}');
SELECT * FROM
jsontable;
SELECT 'ID: ' || NVL(jt.json_column.id :: STRING, ''), 'HEADER: ' || NVL(UPPER(jt.json_column.content.header) :: STRING, '') FROM
jsontable jt;
結果1¶
JSON_COLUMN |
|---|
{ "content": "json content", "id":1} |
{ "content": { "content": "content text one", "header": "header text one" }, "id":2} |
{ "content": { "content": "content text two", "header": "header tex two" }, "id":3} |
結果2¶
'ID: ' JT.JSON_COLUMN:ID |
'HEADER: ' UPPER(JT.JSON_COLUMN:CONTENT:HEADER) |
|---|---|
ID:1 |
|
ID:2 |
HEADER: HEADER TEXT ONE |
ID:3 |
HEADER: HEADER TEX TWO |
注釈
PARSE_JSON 関数を使用するには、 VALUES 句の代わりに INSERT INTO 引数として SELECT を使用する必要があります。
注釈
JSON オブジェクトのプロパティにアクセスするには、演算子'.'の代わりに':'を使用します。どちらのエンジンでも、いくつかのレベルのネストが可能です。
関連 EWIs¶
SSC-EWI-0073:機能的同等性レビューを保留中
LONG データ型¶
LONG列は、最大2ギガバイト-1、または231-1バイトを含む可変長の文字列を格納します。LONG列は、VARCHAR2列の多くの特徴を持っています。長い文字列を格納するために、LONG列を使用することができます。LONG値の長さは、コンピュータの利用可能なメモリによって制限される場合があります。(Oracle SQL 言語リファレンスLongデータ型)
LONG
サンプルソースパターン¶
テーブル作成時のLong¶
Oracle¶
CREATE TABLE long_table
(
id NUMBER,
long_column LONG
);
INSERT INTO long_table VALUES (1, 'this is a text');
Snowflake¶
CREATE OR REPLACE TABLE long_table
(
id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
long_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO long_table
VALUES (1, 'this is a text');
Long列からのデータ取得¶
Oracle¶
SELECT long_column FROM long_table;
結果¶
LONG_COLUMN |
|---|
これはテキストです |
Snowflake¶
SELECT long_column FROM
long_table;
結果¶
LONG_COLUMN |
|---|
これはテキストです |
既知の問題¶
1.long(Oracle)とvarchar(Snowflake)の最大長は異なります¶
Oracleドキュメント によると、Long列は最大2ギガバイトのデータを格納できますが、 Snowflakeのvarchar は16MBに制限されています。
2.Long列のキャスト¶
Longデータ型のみを CLOB データ型にキャストすることができ、これを実現する唯一の方法は TO_LOB 関数を使用することです。この関数は INSERT ステートメントのサブクエリのセレクトリストで使用された場合にのみ機能します。次のサンプルをご覧ください
Oracle¶
CREATE TABLE target_table (col CLOB);
INSERT INTO target_table (SELECT TO_LOB(long_column) FROM long_table);
警告
ターゲットテーブル列のデータ型が CLOB と異なる場合、Oracleはデータを挿入しようとするとnull値を挿入したり、エラーを表示したりすることがあります。
関連 EWIs¶
SSC-FDM-0006:数値型の列はSnowflakeでは同様の動作をしない場合があります。
RAWとLONG RAWデータ型¶
説明¶
RAWとLONGRAWデータ型は、異なるシステム間でデータを移動する際にOracleデータベースが明示的に変換しないデータを格納します。これらのデータ型はバイナリデータまたはバイト文字列を対象としています。(Oracle SQL 言語参照Rowデータ型およびLong Rawデータ型)
{ LONG RAW | RAW (size) }
サンプルソースパターン¶
テーブル作成時のRawとLong Raw¶
Oracle¶
CREATE TABLE raw_table
(
id INTEGER,
raw_column RAW(2000),
long_raw_column LONG RAW
);
INSERT INTO raw_table values(1, 'FF00FF00FF', 'FF00FF00FFAABAABABABABA917843210984237123ABABABABAABBAAABBACDFFD');
INSERT INTO raw_table values(2, 'AAAAAAAAAA', 'ABABABABABABABABABABABABABABABAbABAbABAABABAAABABABABABABABABABABA');
--Insert with largest string posible (2000 HEX characters)
INSERT INTO raw_table VALUES (3, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA')
Snowflake CREATE OR REPLACE TABLE raw_table¶
CREATE OR REPLACE TABLE raw_table
(
id INTEGER,
raw_column BINARY,
long_raw_column BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO raw_table
values(1, 'FF00FF00FF', 'FF00FF00FFAABAABABABABA917843210984237123ABABABABAABBAAABBACDFFD');
INSERT INTO raw_table
values(2, 'AAAAAAAAAA', 'ABABABABABABABABABABABABABABABAbABAbABAABABAAABABABABABABABABABABA');
--Insert with largest string posible (2000 HEX characters)
INSERT INTO raw_table
VALUES (3, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
RawおよびLong Raw列からのデータ取得¶
Oracle¶
SELECT * FROM raw_table ORDER BY id;
結果¶
ID |
RAW_COLUMN |
LONG_RAW_COLUMN |
|---|---|---|
1 |
ªº««««© 2 B7 :ºººº«ºª»¬ßý |
|
2 |
ªªªªª |
«««««««««««««««««««ªººªºººººººººº |
3 |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
Snowflake¶
SELECT * FROM
raw_table
ORDER BY id;
結果¶
ID |
RAW_COLUMN |
LONG_RAW_COLUMN |
|---|---|---|
1 |
ªº««««© 2 B7 :ºººº«ºª»¬ßý |
|
2 |
ªªªªª |
«««««««««««««««««««ªººªºººººººººº |
3 |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連 EWIs はありません。
数値データ型¶
説明¶
Oracle Databaseの数値データ型は、正と負の固定小数点数と浮動小数点数、ゼロ、無限大、および演算の未定義の結果である「数値ではない」値、
NANを格納します。(Oracle Language Reference Numeric Data Types)
算術演算に関する注意事項¶
数値データ型に対して行われるすべての操作は、内部的には数値として保存されることに注意してください。さらに、実行された操作によっては、Snowflake内での中間値の格納方法に関連するエラーが発生する可能性があります。詳細については、 Snowflakeの中間数値に関するSnowflakeの投稿 を参照してください。
FLOAT データ型¶
説明¶
FLOATデータ型はNUMBERのサブタイプです。精度の有無は指定可能で、精度はNUMBERと同じ定義を持ち、1から126の範囲で指定できます。スケールは指定できませんが、データから解釈されます。(Oracle言語リファレンスFloatデータ型)
警告
Notes on arithmetic operations
数値データ型に対して行われるすべての操作は、内部的に数値として保存されることに注意してください。さらに、実行した操作によっては、Snowflake内での中間値の保存方法に関連したエラーが発生する可能性があります。詳細情報については、 Snowflakeの中間数値に関するSnowflakeの投稿 をご確認ください。
サンプルソースパターン¶
以下のテーブルとその挿入例をご覧ください。
テーブル作成時のFloatデータ型¶
Oracle¶
CREATE TABLE float_data_type_table(
col1 FLOAT,
col2 FLOAT(5),
col3 FLOAT(126)
);
INSERT INTO float_data_type_table (col1) VALUES (100.55555);
INSERT INTO float_data_type_table (col1) VALUES (1.9);
INSERT INTO float_data_type_table (col2) VALUES (1.23);
INSERT INTO float_data_type_table (col2) VALUES (7.89);
INSERT INTO float_data_type_table (col2) VALUES (12.79);
INSERT INTO float_data_type_table (col2) VALUES (123.45);
INSERT INTO float_data_type_table (col3) VALUES (1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.99999999999999999999555555);
Snowflake¶
CREATE OR REPLACE TABLE float_data_type_table (
col1 FLOAT,
col2 FLOAT(5),
col3 FLOAT(126)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO float_data_type_table(col1) VALUES (100.55555);
INSERT INTO float_data_type_table(col1) VALUES (1.9);
INSERT INTO float_data_type_table(col2) VALUES (1.23);
INSERT INTO float_data_type_table(col2) VALUES (7.89);
INSERT INTO float_data_type_table(col2) VALUES (12.79);
INSERT INTO float_data_type_table(col2) VALUES (123.45);
INSERT INTO float_data_type_table(col3) VALUES (1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111.99999999999999999999555555);
FLOAT¶
精度のない FLOAT データ型に関しては、OracleとSnowflakeで違いはありません。
Oracle¶
SELECT col1 FROM float_data_type_table;
結果¶
col1 |
|---|
100.55555 |
1.9 |
Snowflake¶
SELECT col1 FROM
float_data_type_table;
結果¶
col1 |
|---|
100.55555 |
1.9 |
FLOAT ( p )¶
FLOAT データ型に精度 (p) が指定されている場合、クエリ結果が等価にならないことがあります。若干の四捨五入の違いがあります。
Oracle¶
SELECT col2 FROM float_data_type_table;
SELECT col3 FROM float_data_type_table;
結果¶
col2 |
|---|
1.2 |
7.9 |
13 |
120 |
col3 |
---------------------------------------------------------------------------------------------------- |
1111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000 |
Snowflake¶
SELECT col2 FROM
float_data_type_table;
SELECT col3 FROM
float_data_type_table;
結果¶
col2 |
|---|
1.23 |
7.89 |
12.79 |
123.45 |
col3 |
---------------------------------------------------------------------------------------------------- |
1111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
既知の問題¶
1.精度を持つ FLOAT データ型¶
FLOAT データ型に精度がある場合、クエリ結果に若干の四捨五入の違いが生じることがあります。
関連 EWIs¶
関連 EWIs はありません。
NUMBER データ型¶
説明¶
NUMBERデータ型は、ゼロ、1.0 x 10-130から1.0 x 10126を含まない絶対値の正負の固定数を格納します。値の絶対値が1.0 x 10126以上の算術式を指定すると、Oracleはエラーを返します。NUMBERの各値には1~22バイトが必要です。(Oracle言語リファレンス数値データ型)。
NUMBER データ型は、次の形式 NUMBER(p, s) (両方のパラメーターはオプション)を使用して指定できます。
pは 精度 または有効な小数点の最大数で、最上位桁は左端の0でない桁、最下位桁は右端の既知の桁です。精度の範囲は0から38までです。sは スケール または小数点から最下位桁までの桁数です。スケールの範囲は-84から127までです。
Oracleでは、精度を指定しない場合(NUMBER または NUMBER(*) を使用)、列が「未定義の精度」として作成されます。これは、Oracleが動的に値を格納し、その列内に任意の数値を格納できることを意味します。Snowflakeはこの機能をサポートしていません。そのため、 NUMBER(38, 18)に変更され、最も多様な数値を保存できるようになります。
警告
Notes on arithmetic operations
数値データ型に対して行われるすべての操作は、内部的には数値として保存されることに注意してください。さらに、実行された操作によっては、Snowflake内での中間値の格納方法に関連するエラーが発生する可能性があります。詳細については、投稿 Snowflakeの中間数値に関するSnowflakeの投稿 を参照するか、機能的同等性メッセージ SSC-FDM-0006 を確認してください。
サンプルソースパターン¶
以下のテーブルとその挿入例をご覧ください。
テーブル作成時の数値データ型¶
Oracle¶
CREATE TABLE number_data_type_table
(
col1 NUMBER,
col2 NUMBER(1),
col3 NUMBER(10, 5),
col4 NUMBER(5, -2),
col5 NUMBER(4, 5)
);
INSERT INTO number_data_type_table(COL1) VALUES(100);
INSERT INTO number_data_type_table(COL2) VALUES(1.99999);
INSERT INTO number_data_type_table(COL3) VALUES(12345.12345);
INSERT INTO number_data_type_table(COL4) VALUES(16430.55555);
INSERT INTO number_data_type_table (COL4) VALUES(17550.55555);
INSERT INTO number_data_type_table(COL5) VALUES(0.00009);
INSERT INTO number_data_type_table(COL5) VALUES(0.000021);
INSERT INTO number_data_type_table(COL5) VALUES(0.012678912);
Snowflake¶
CREATE OR REPLACE TABLE number_data_type_table
(
col1 NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col2 NUMBER(1) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col3 NUMBER(10, 5) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col4 NUMBER(5) !!!RESOLVE EWI!!! /*** SSC-EWI-OR0092 - NUMBER DATATYPE NEGATIVE SCALE WAS REMOVED FROM OUTPUT ***/!!! /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
col5 NUMBER(5, 5) /*** SSC-FDM-OR0010 - NUMBER DATATYPE SMALLER PRECISION WAS INCREASED TO MATCH SCALE ***/ /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO number_data_type_table(COL1) VALUES(100);
INSERT INTO number_data_type_table(COL2) VALUES(1.99999);
INSERT INTO number_data_type_table(COL3) VALUES(12345.12345);
INSERT INTO number_data_type_table(COL4) VALUES(16430.55555);
INSERT INTO number_data_type_table(COL4) VALUES(17550.55555);
INSERT INTO number_data_type_table(COL5) VALUES(0.00009);
INSERT INTO number_data_type_table(COL5) VALUES(0.000021);
INSERT INTO number_data_type_table(COL5) VALUES(0.012678912);
NUMBER (デフォルトケース)¶
精度とスケールが指定されていない場合、デフォルト値は利用可能な最大値 NUMBER(38, 127) となります。デフォルトケースの現在の変換は NUMBER(38,19) です。
警告
Oracleでは、精度もスケールも定義しないと、デフォルトで「未定義の精度とスケール」になります。入力を「受信したとおりに」保存することで動作します。つまり、整数と浮動小数点数の両方を処理できます。ここでは、 38, 18 を使って、整数に20を使い、浮動小数点数に18を残すことで、その両方をカバーしようとしています。
Oracle¶
SELECT col1 FROM number_data_type_table;
結果¶
col1 |
|---|
100 |
Snowflake¶
SELECT col1 FROM
number_data_type_table;
結果¶
col1 |
|---|
100.0000000000000000000 |
NUMBER ( p )¶
この場合、精度は小数点の左側の数値の桁数を指定します。
Oracle¶
SELECT col2 FROM number_data_type_table;
結果¶
col2 |
|---|
2 |
Snowflake¶
SELECT col2 FROM
number_data_type_table;
結果¶
col2 |
|---|
2 |
NUMBER ( p, s ) p > s¶
s が p よりも低い場合、精度はその数値が持ちうる桁数を指定します。スケールは小数点の右側の有効桁数を指定しますので、小数点の左側の桁数は指定されたスケールに依存します。
Oracle¶
SELECT col3 FROM number_data_type_table;
結果¶
col3 |
|---|
12345.12345 |
Snowflake¶
SELECT col3 FROM
number_data_type_table;
結果¶
col3 |
|---|
12345.12345 |
NUMBER ( p, -s )¶
負のスケールは、小数点の左側の有効桁数で、最下位桁を含みません。負のスケールの場合、実際のデータは小数点の左側の指定された桁数に丸められるため、最下位桁は小数点の左側になります。現在の変換は、負のスケールを削除することです。
Oracle¶
SELECT col4 FROM number_data_type_table;
結果¶
col4 |
|---|
16400 |
17600 |
Snowflake¶
SELECT col4 FROM
number_data_type_table;
結果¶
col4 |
|---|
16431 |
17551 |
NUMBER ( p, s ) s > p¶
スケールが精度を上回る場合は、以下の点を考慮してください。
挿入される数値は、小数点の左側に有効桁数がない可能性があります。使用可能なのは0のみです。
小数点の右側の1桁目は0でなければなりません。
精度は小数点の右側の最大有効桁数を指定します。
Oracle¶
SELECT col5 FROM number_data_type_table;
結果¶
col5 |
|---|
0.00009 |
0.00002 |
0.01268 |
Snowflake¶
SELECT col5 FROM
number_data_type_table;
結果¶
col5 |
|---|
0.00009 |
0.00002 |
0.01268 |
既知の問題¶
1.スケール値がSnowflakeで許容される最大値を超えています¶
Snowflakeで許容される最大スケール(37)を超えるスケールを指定した場合、18に変更されます。この件に関する詳しい情報は、 SSC-FDM-0006 ドキュメントをご参照ください。
2.負のスケール¶
Snowflakeは負のスケールを許可しないので、削除されます。これは機能的非同等性を引き起こす可能性があります。この問題についての詳細は SSC-EWI-0R0092 のドキュメントをご覧ください。
推奨事項¶
1.NUMBER データ型操作のための UDF¶
算術演算を実行するときに次の UDF を使用してこれらの操作を手動で移行し、記載されている問題を回避することができます。
UDF¶
CREATE OR REPLACE FUNCTION fixed_divide(a NUMBER(38,19), b NUMBER(38,19))
RETURNS NUMBER(38,19)
LANGUAGE JAVA
CALLED ON NULL INPUT
HANDLER='TestFunc.divide'
AS
'
import java.math.BigDecimal;
import java.math.RoundingMode;
class TestFunc {
public static BigDecimal divide(BigDecimal a, BigDecimal b) {
return a.divide(b,RoundingMode.HALF_UP);
}
}';
関連 EWIs¶
SSC-EWI-OR0092 数値データ型の負のスケールが出力から削除されました。
SSC-FDM-0006:数値型の列はSnowflakeでは同様の動作をしない場合があります。
SSC-FDM-OR0010 数値データ型の精度をスケールに合わせて小さくしました。
浮動小数点数¶
説明¶
浮動小数点数は、小数点が1桁目から最後の桁までのどこにあってもよいし、小数点がまったくないこともあります。指数は、例えば1.777 e-20のように、範囲を広げるために数値の後に続けて使用することもできます。小数点の後の桁数が制限されていないため、スケール値は浮動小数点には適用できません。2進浮動小数点数は、2進精度(桁0と1)を使用して格納されます。(Oracle Language Reference Floating-Point Numbers)
BINARY_DOUBLE¶
説明¶
BINARY_DOUBLEは64ビットの、倍精度浮動小数点数データ型です。BINARY_DOUBLEの各値は8バイト必要です。BINARY_DOUBLE列では、浮動小数点数はバイナリ精度です。バイナリ浮動小数点数は、特別な値infinityおよびNaN(数値ではない)をサポートしています。(Oracle言語リファレンスBinary_Doubleデータ型)
浮動小数点数の指定は次の範囲内であれば可能です。
正の有限値の最大値 = 1.79769313486231E+308
正の有限値の最小値 = 2.22507485850720E-308
サンプルソースパターン¶
以下のテーブルとその挿入例をご覧ください。
テーブル作成時のバイナリダブル¶
Oracle¶
CREATE TABLE binary_double_data_type_table
(
COL1 BINARY_DOUBLE
);
INSERT INTO binary_double_data_type_table VALUES(2.22507485850720E-308D);
INSERT INTO binary_double_data_type_table VALUES(1.79769313486231E+308D);
INSERT INTO binary_double_data_type_table VALUES('NaN');
Snowflake¶
CREATE OR REPLACE TABLE binary_double_data_type_table
(
COL1 FLOAT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO binary_double_data_type_table
VALUES(2.22507485850720E-308);
INSERT INTO binary_double_data_type_table
VALUES(1.79769313486231E+308);
INSERT INTO binary_double_data_type_table
VALUES('NaN');
注釈
「NaN」 は _ Not a Number _ を意味します。この値はOracleでは BINARY_DOUBLE データ型によって、Snowflakeでは FLOAT データ型によって許可されています。
BINARY_DOUBLE -> FLOAT¶
BINARY_DOUBLE データ型はSnowflakeではサポートされていないため、 FLOAT に変換されます。
Oracle¶
SELECT * FROM binary_double_data_type_table;
結果¶
col1 |
|---|
0 |
179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
NaN |
Snowflake¶
SELECT * FROM
binary_double_data_type_table;
結果¶
col1 |
|---|
0 |
179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |
NaN |
既知の問題¶
1.BINARY_DOUBLE データ型はSnowflakeではサポートされていません¶
BINARY_DOUBLE データ型はSnowflakeではサポートされていないため、 FLOAT に変換されます。
関連 EWIs¶
関連 EWIs はありません。
BINARY_FLOAT¶
説明¶
BINARY_FLOATは32ビットの、単精度浮動小数点数データ型です。BINARY_FLOATの各値は4バイト必要です。BINARY_FLOAT列では、浮動小数点数はバイナリ精度です。バイナリ浮動小数点数は、特別な値infinityおよびNaN(数値ではない)をサポートしています。(Oracle言語リファレンスBinary_Floatデータ型)
浮動小数点数の指定は次の範囲内であれば可能です。
正の有限値の最大値 = 3.40282E+38F
正の有限値の最小値 = 1.17549E-38F
サンプルソースパターン¶
以下のテーブルとその挿入例をご覧ください。
テーブル作成時のバイナリフロート¶
Oracle¶
CREATE TABLE binary_float_data_type_table
(
col1 BINARY_FLOAT
);
INSERT INTO binary_float_data_type_table VALUES(1.17549E-38F);
INSERT INTO binary_float_data_type_table VALUES(3.40282E+38F);
INSERT INTO binary_float_data_type_table VALUES('NaN');
Snowflake¶
CREATE OR REPLACE TABLE binary_float_data_type_table
(
col1 FLOAT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO binary_float_data_type_table
VALUES(1.17549E-38);
INSERT INTO binary_float_data_type_table
VALUES(3.40282E+38);
INSERT INTO binary_float_data_type_table
VALUES('NaN');
注釈
「NaN」 は _ Not a Number _ を意味します。この値はOracleでは BINARY_FLOAT データ型によって、Snowflakeでは FLOAT データ型によって許可されています。
BINARY_FLOAT -> FLOAT¶
BINARY_FLOAT データ型はSnowflakeではサポートされていないため、 FLOAT に変換されます。
Oracle¶
SELECT * FROM binary_float_data_type_table;
結果¶
col1 |
|---|
0 |
340282001837565600000000000000000000000 |
NaN |
Snowflake¶
SELECT * FROM binary_float_data_type_table;
結果¶
col1 |
|---|
0 |
340282000000000000000000000000000000000 |
NaN |
既知の問題¶
1.BINARY_FLOAT データ型はSnowflakeではサポートされていません¶
BINARY_FLOAT データ型はSnowflakeではサポートされていないため、 FLOAT に変換されます。
関連 EWIs¶
関連 EWIs はありません。
日時および間隔データ型¶
日時データ型は、
DATE、TIMESTAMP、TIMESTAMPWITHTIMEZONE、TIMESTAMPWITHLOCALTIMEZONEです。日時データ型の値はdatetime値と呼ばれることもあります。間隔データ型はINTERVALYEARTOMONTHおよびINTERVALDAYTOSECONDです。間隔データ型の値はinterval値と呼ばれることもあります。(Oracle SQL Language Reference Datetime and Interval Data Types)
DATE データ型¶
説明¶
Oracleの日付データ型は日付と時刻の両方の情報を格納しますが、Snowflakeの日付データ型は日付情報のみを格納します。(Oracle SQL 言語リファレンス日付データ型)
OracleDATE のデフォルト変換は Snowflake TIMESTAMP です。disableDateAsTimestamp フラグ(SnowConvert AIコマンドラインインターフェース)を追加するか、 Transform Date as Timestamp 設定(SnowConvert AIデスクトップアプリケーション)を 無効 にすることで、 DATE 型を TIMESTAMP に変換することができます。Snowflake DATE は日付情報のみを保存し、Oracle は日付と時刻の情報を保存することに留意してください。情報を失わないようにするには、 DATE を TIMESTAMP に変換する必要があります。
注釈
重要な四捨五入の動作の違い:date/timestamp データ型と秒を含む期間との間の操作を実行する場合、Oracle は秒を丸めず、指定された精度を保持しますが、Snowflake は秒を最も近い整数秒に丸めます。この四捨五入の動作の違いが、異なる結果につながることがあります。
サンプルソースパターン¶
テーブル作成時の日付¶
Oracle¶
CREATE TABLE date_table
(
date_col date
);
INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
--disableDateAsTimestamp フラグなし、または「日付をタイムスタンプとして変換」設定が有効になっているSnowflake¶
CREATE OR REPLACE TABLE date_table
(
date_col TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
--disableDateAsTimestamp フラグ付き、または「日付をタイムスタンプとして変換」設定が無効になっているSnowflake¶
CREATE OR REPLACE TABLE date_table
(
date_col date
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
日付列からのデータの取得¶
Oracle¶
SELECT date_col FROM date_table;
結果¶
DATE_COL |
|---|
2010-10-10 00:00:00.000 |
Snowflake¶
SELECT date_col FROM
date_table;
結果¶
DATE_COL |
|---|
2010-10-10 00:00:00.000 |
disableDateAsTimestamp フラグの結果¶
DATE_COL |
|---|
2010-10-10 |
既知の問題¶
1.言語によって入力形式と出力形式が異なる場合があります¶
Snowflakeでは、 _ DATE_ の入力形式と出力形式は、 _ DATE_INPUT_FORMAT_ と _ DATE_OUTPUT_FORMAT_ のセッション変数に依存します。DATE_INPUT_FORMAT は、ユーザーがテキストで日付を追加する際に特定の形式を使用するよう強制するため、挿入に失敗することがあります。これらの変数は以下の構文で変更できます。
ALTER SESSION SET DATE_INPUT_FORMAT = 'YYYY-DD-MM' DATE_OUTPUT_FORMAT = 'DD-MM-YYYY';
関連 EWIs¶
SSC-FDM-OR0042:Timestamp に変換された Date 型の動作が異なる
INTERVAL DAY TO SECOND データ型¶
説明¶
INTERVAL DAY TO SECOND は、期間を日、時、分、秒の単位で格納します。(Oracle SQL 言語リファレンス INTERVAL DAY TO SECOND データ型)
Snowflakeにはこのデータ型に相当するものはなく、現在は VARCHAR に変換されています。
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]
サンプルソースパターン¶
テーブル作成時の日~秒の間隔¶
Oracle¶
CREATE TABLE interval_day_to_second_table
(
interval_day_col1 interval day to second,
interval_day_col2 interval day(1) to second(4)
);
INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ( INTERVAL '1 2:3:4.56' DAY TO SECOND );
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ( INTERVAL '1 2:3:4.56' DAY(1) TO SECOND(4) );
Snowflake¶
CREATE OR REPLACE TABLE interval_day_to_second_table
(
interval_day_col1 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL day to second DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_day_col2 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL day(1) to second(4) DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO interval_day_to_second_table(interval_day_col1) VALUES ('1d, 2h, 3m, 4s, 56ms');
INSERT INTO interval_day_to_second_table(interval_day_col2) VALUES ('1d, 2h, 3m, 4s, 56ms');
間隔値は、サポートされているSnowflake形式に変換され、列の中にテキストとして挿入されます。Snowflakeは 間隔 をデータ型としてサポートしていないため、算術演算でのみサポートされます。この値を使用するには、(可能であれば) 間隔定数 として取り出して使用する必要があります。
オリジナルのOracle値: INTERVAL '1 2:3:4.567' DAY TO SECOND
Snowflake列に格納された値: '1d, 2h, 3m, 4s, 567ms'
Snowflake間隔定数としての値: INTERVAL '1d, 2h, 3m, 4s, 567ms'
日~秒の間隔列からのデータの取得¶
Oracle¶
SELECT * FROM interval_day_to_second_table;
結果¶
INTERVAL_DAY_COL1 |
INTERVAL_DAY_COL2 |
|---|---|
1 2:3:4.567 |
|
1 2:3:4.567 |
Snowflake¶
SELECT * FROM
interval_day_to_second_table;
結果¶
INTERVAL_DAY_COL1 |
INTERVAL_DAY_COL2 |
|---|---|
1日、2時間、3分、4秒、56ミリ秒 |
|
1日、2時間、3分、4秒、56ミリ秒 |
既知の問題¶
1.算術演算のみがサポートされています¶
Snowflake間隔にはいくつかの制限があります。DATE または TIMESTAMP と 間隔定数 間の算術演算のみがサポートされており、その他のシナリオはサポートされていません。
関連 EWIs¶
SSC-EWI-0036:データ型が別のデータ型に変換されました。
INTERVAL YEAR TO MONTH データ型¶
説明¶
INTERVAL YEAR TO MONTH は、 YEAR と MONTH の日付時刻フィールドを使用して期間を保存します。Snowflakeには同等のものがないため、Varcharに変換されます(Oracle SQL 言語リファレンス INTERVAL YEAR TO MONTH データ型)
Snowflakeにはこのデータ型に相当するものはなく、現在は VARCHAR に変換されています。
INTERVAL YEAR [(year_precision)] TO MONTH
サンプルソースパターン¶
テーブル作成時の年~月の間隔¶
Oracle¶
CREATE TABLE interval_year_to_month_table
(
interval_year_col1 interval year to month,
interval_year_col2 interval year(4) to month
);
INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ( INTERVAL '1-2' YEAR TO MONTH );
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ( INTERVAL '1000-11' YEAR(4) TO MONTH );
Snowflake¶
CREATE OR REPLACE TABLE interval_year_to_month_table
(
interval_year_col1 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL year to month DATA TYPE CONVERTED TO VARCHAR ***/!!!,
interval_year_col2 VARCHAR(20) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - INTERVAL year(4) to month DATA TYPE CONVERTED TO VARCHAR ***/!!!
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO interval_year_to_month_table(interval_year_col1) VALUES ('1y, 2mm');
INSERT INTO interval_year_to_month_table(interval_year_col2) VALUES ('1000y, 11mm');
間隔値は、サポートされているSnowflake形式に変換され、列の中にテキストとして挿入されます。Snowflakeは 間隔 をデータ型としてサポートしていないため、算術演算でのみサポートされます。この値を使用するには、(可能であれば) 間隔定数 として取り出して使用する必要があります。
オリジナルのOracle値: INTERVAL '1-2' YEAR TO MONTH
Snowflake列に格納された値: '1y, 2m'
Snowflake間隔定数としての値: INTERVAL '1y, 2m'
年~月の間隔列からのデータの取得¶
Oracle¶
SELECT * FROM interval_year_to_month_table;
結果¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1-2 |
|
1000-11 |
Snowflake¶
SELECT * FROM
interval_year_to_month_table;
結果¶
INTERVAL_YEAR_COL1 |
INTERVAL_YEAR_COL2 |
|---|---|
1y, 2m |
|1000y, 11m |
既知の問題¶
1.算術演算のみがサポートされています¶
Snowflake間隔にはいくつかの制限があります。DATE または TIMESTAMP と 間隔定数 間の算術演算のみがサポートされており、その他のシナリオはサポートされていません。
関連 EWIs¶
SSC-EWI-0036:データ型が別のデータ型に変換されました。
TIMESTAMP データ型¶
説明¶
TIMESTAMP データ型は、 DATE データ型を拡張したものです。DATE データ型の年、月、日に加え、時、分、秒の値が格納されます。(Oracle SQL 言語参照タイムスタンプデータ型)
OracleとSnowflakeの TIMESTAMP データ型は同じ精度範囲(0~9)ですが、デフォルト値が異なります。Oracleではデフォルトの精度値は6で、Snowflakeでは9です。
ただし、挿入された値がセット精度を超えた場合の動作には違いがあります。Oracleは超過した小数点を切り上げますが、Snowflakeは値を切り詰めるだけです。
TIMESTAMP [(fractional_seconds_precision)]
サンプルソースパターン¶
テーブル作成時のタイムスタンプ¶
Oracle¶
CREATE TABLE timestamp_table
(
timestamp_col1 TIMESTAMP,
timestamp_col2 TIMESTAMP(7)
);
INSERT INTO timestamp_table(timestamp_col1, timestamp_col2) VALUES (TIMESTAMP '2010-10-10 12:00:00', TIMESTAMP '2010-10-10 12:00:00');
Snowflake¶
CREATE OR REPLACE TABLE timestamp_table
(
timestamp_col1 TIMESTAMP(6),
timestamp_col2 TIMESTAMP(7)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO timestamp_table(timestamp_col1, timestamp_col2) VALUES (TIMESTAMP '2010-10-10 12:00:00', TIMESTAMP '2010-10-10 12:00:00');
タイムスタンプ列からのデータの取得¶
Oracle¶
SELECT * FROM timestamp_table;
結果¶
TIMESTAMP_COL1 |
TIMESTAMP_COL2 |
|---|---|
2010-10-10 12:00:00.000 |
2010-10-10 12:00:00.000 |
Snowflake¶
SELECT * FROM
timestamp_table;
結果¶
TIMESTAMP_COL1 |
TIMESTAMP_COL2 |
|---|---|
2010-10-10 12:00:00.000 |
2010-10-10 12:00:00.000 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連 EWIs はありません。
TIMESTAMP WITH LOCAL TIME ZONE データ型¶
説明¶
TIMESTAMP WITH TIME ZONE と異なる点は、データベースに格納されたデータはデータベースのタイムゾーンに正規化され、タイムゾーン情報は列データの一部として格納されないことです。(Oracle SQL 言語リファレンスローカルタイムゾーン付きタイムスタンプデータ型)
Snowflakeの同等のものは、 TIMESTAMP_LTZ です。
詳細情報については、 TIMESTAMP のセクションもご参照ください。
TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE
サンプルソースパターン¶
テーブル作成時のタイムゾーン付きタイムスタンプ¶
Oracle¶
CREATE TABLE timestamp_with_local_time_zone_table
(
timestamp_col1 TIMESTAMP(5) WITH LOCAL TIME ZONE
);
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -08:00');
Snowflake¶
CREATE OR REPLACE TABLE timestamp_with_local_time_zone_table
(
timestamp_col1 TIMESTAMP_LTZ(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -08:00');
ローカルタイムゾーン付きタイムスタンプ列からのデータの取得¶
Oracle¶
SELECT * FROM timestamp_with_local_time_zone_table;
結果¶
TIMESTAMP_COL1 |
|---|
2010-10-10 18:00:00.000 |
2010-10-10 20:00:00.000 |
Snowflake¶
SELECT * FROM
timestamp_with_local_time_zone_table;
結果¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0700 |
2010-10-10 12:00:00.000 -0700 |
注釈
それぞれのデータベースには異なるタイムゾーンがセットされているため、両エンジンで結果が異なることに注意してください。Oracleのタイムゾーンは「+00:00」で、Snowflakeのタイムゾーンは「America/Los_Angeles」です。
データベースのデフォルトのタイムゾーンを変更するには、以下の構文を使用します。
ALTER account SET timezone = timezone_string;
既知の問題¶
1.デフォルトのデータベースのタイムゾーン¶
この種類のデータ型での操作はデータベースのタイムゾーンの影響を受け、結果が異なる場合があります。デフォルトのタイムゾーンは以下のクエリで確認できます。
Oracle¶
SELECT dbtimezone FROM dual;
Snowflake¶
SELECT dbtimezone FROM dual;
2.ローカルタイムゾーン動作のOracleタイムスタンプ¶
ローカルタイムゾーンデータ型でタイムスタンプを操作する場合、Oracleはタイムスタンプをデータベースのデフォルトのタイムゾーンに変換します。Snowflakeでこの動作をエミュレートするには、 TIMESTAMP_TYPE_MAPPING セッションパラメーターを「TIMESTAMP_LTZ」に設定します。
ALTER SESSION SET TIMESTAMP_TYPE_MAPPING = 'TIMESTAMP_LTZ';
3.タイムスタンプの形式は異なる場合があります¶
Snow Convertは日付/タイムスタンプ形式文字列の変換を行わないため、コードのデプロイ時にエラーが発生する可能性があります。例:
Oracle¶
INSERT INTO timestamp_with_local_time_zone_table (timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Snowflake¶
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
警告
デフォルトのタイムスタンプ入力形式では、「-8:00」が有効な UTC オフセットとして認識されないため、Snowflakeではクエリが失敗します。同じ結果を得るためには、「0800」または「-08:00」に置き換えてください。
関連 EWIs¶
関連 EWIs はありません。
TIMESTAMP WITH TIME ZONE データ型¶
説明¶
TIMESTAMP WITH TIME ZONE は TIMESTAMP のバリアントで、値にタイムゾーンリージョン名やタイムゾーンオフセットを含みます。Snowflakeの同等のものは、 TIMESTAMP_TZ です。(Oracle SQL 言語リファレンスタイムゾーンデータ型のタイムスタンプ)
Snowflakeの同等のものは、 TIMESTAMP_TZ です。
詳細情報については、 TIMESTAMP のセクションもご参照ください。
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE
サンプルソースパターン¶
テーブル作成時のタイムゾーン付きタイムスタンプ¶
Oracle¶
CREATE TABLE timestamp_with_time_zone_table
(
timestamp_col1 TIMESTAMP(5) WITH TIME ZONE
);
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
Snowflake¶
CREATE OR REPLACE TABLE timestamp_with_time_zone_table
(
timestamp_col1 TIMESTAMP_TZ(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00');
タイムゾーン付きタイムスタンプ列からのデータの取得¶
Oracle¶
SELECT * FROM timestamp_with_time_zone_table;
結果¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0600 |
Snowflake¶
SELECT * FROM
timestamp_with_time_zone_table;
結果¶
TIMESTAMP_COL1 |
|---|
2010-10-10 12:00:00.000 -0700 |
注釈
タイムゾーンが指定されていない場合、データベースのデフォルトのタイムゾーンが追加されるため、両方のエンジンでタイムゾーンが異なることに注意してください。
データベースのデフォルトのタイムゾーンを変更するには、以下の構文を使用します。
ALTER account SET sqtimezone = timezone_string;
既知の問題¶
1.タイムスタンプの形式は異なる場合があります¶
Snow Convertは日付/タイムスタンプ形式文字列の変換を行わないため、コードのデプロイ時にエラーが発生する可能性があります。例:
Oracle¶
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Snowflake¶
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
警告
デフォルトのタイムスタンプ入力形式では、「-8:00」が有効な UTC オフセットとして認識されないため、Snowflakeではクエリが失敗します。同じ結果を得るためには、'-0800'または'-08:00'に置き換える必要があります。
関連 EWIs¶
関連 EWIs はありません。
datetimeの算術演算¶
このコンテンツでは、datetime型間のいくつかの算術演算の現在の変換について説明します。
説明¶
Oracleでは、足し算、引き算、掛け算、割り算のように、DateTime型の間でいくつかの算術演算を行うことができます。現在のところ、SnowConvert AIは足し算と引き算のいくつかのケースを解決することができます。これらのケースを以下に説明します。
サンプルソースパターン¶
これは、日付、タイムスタンプ、数値、および未知の型による加算と減算のさまざまな組み合わせに対する現在の変換の概要です。
注釈
以下の例については、次の表をご参照ください。
Oracle¶
CREATE OR REPLACE TABLE TIMES (
AsTimeStamp TIMESTAMP(6),
AsTimestampTwo TIMESTAMP(6),
AsDate TIMESTAMP,
AsDateTwo TIMESTAMP
);
INSERT INTO TIMES
VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
Snowflake¶
CREATE OR REPLACE TABLE TIMES (
AsTimeStamp TIMESTAMP(6),
AsTimestampTwo TIMESTAMP(6),
AsDate TIMESTAMP(6),
AsDateTwo TIMESTAMP(6)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO TIMES
VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
加算¶
組み合わせマトリックス¶
これは、日付、タイムスタンプ、数値、および未知の型とのさまざまな組み合わせに対して、マイグレーターがどのように加算操作を解決するかの要約です。
加算 |
Date |
タイムスタンプ |
Number |
間隔 |
不明 |
Float |
|---|---|---|---|---|---|---|
Date |
INVALID |
INVALID |
Date+間隔(日) |
Date+間隔(IntervalUnit) |
DATEADD_UDF |
DATEADD_UDF |
タイムスタンプ |
INVALID |
INVALID |
タイムスタンプ+間隔(日) |
タイムスタンプ+間隔(IntervalUnit) |
DATEADD_UDF |
DATEADD_UDF |
Number |
Date+間隔(日) |
タイムスタンプ+間隔(日) |
Number + Number |
INVALID |
Number + Float |
|
間隔 |
Date+間隔(IntervalUnit) |
タイムスタンプ+間隔(IntervalUnit) |
INVALID |
不明+間隔(IntervalUnit) |
INVALID |
|
不明 |
DATEADD_UDF |
DATEADD_UDF |
不明+ Number |
不明+間隔(IntervalUnit) |
||
Float |
DATEADD_UDF |
DATEADD_UDF |
Float + Number |
INVALID |
Float + Float |
注釈
不明型の列は、マイグレーターがその列が含むデータ型を確立できなかった結果です。例えば、操作対象のテーブルのDDLs、ビューへの操作の結果の列、CTES、またはサブクエリなどがない場合です。
警告
デフォルトで、Snow ConvertはDate/Timestamp + Interval型の操作をネイティブのSnowflakeの操作に移行しますが、場合によっては代わりに UDF を使用すると便利なことがあります。このUDFについての詳細は こちら をご参照ください。
マイグレーターが加算操作を解決するために使用できるさまざまなパスについて、以下に説明します。
無効¶
Oracleで加算操作を行う場合、特定の組み合わせは無効です。
Oracle¶
SELECT AsDate + AsDateTwo From TIMES;
SELECT AsDate + AsTimeStamp From TIMES;
結果¶
SQL Error [975] [42000]: ORA-00975: date + date not allowed
SQL Error [30087] [99999]: ORA-30087: Adding two datetime values is not allowed
Date+間隔(日)¶
これは、日付型と数値(およびその逆)の加算操作のための現在の変換です。例
Oracle¶
SELECT AsDate + 1 FROM TIMES;
SELECT 1 + AsDate FROM TIMES;
結果¶
ASDATE+1 |
|---|
2021-11-07 00:00:00.000 |
1+ASDATE |
|---|
2021-11-07 00:00:00.000 |
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
AsDate + 1 FROM
TIMES;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Number AND unknown ***/!!! 1 + AsDate FROM
TIMES;
結果¶
ASDATE + INTERVAL '1 DAY' |
|---|
2021-11-07 |
タイムスタンプ+間隔(日)¶
これは、タイムスタンプ型と数値(およびその逆)の加算操作のための現在の変換です。例
Oracle¶
SELECT AsTimestamp + 1 FROM TIMES;
SELECT 1 + AsTimestamp FROM TIMES;
結果¶
ASTIMESTAMP+1 |
|---|
2021-11-06 11:00:00.000 |
1+ASTIMESTAMP |
|---|
2021-11-06 11:00:00.000 |
注釈
注意:Oracleでは、DATEとTIMESTAMP列の両方が時間コンポーネントを含んでいますが、Oracleは NLS_DATE_FORMAT パラメーターで指定されたフォーマットマスクを使用して、日付を暗黙的に文字列に変換する方法を決定しています。そのため、TIMESTAMPと Interval の間でいくつかの操作を実行すると、 NLS_DATE_FORMAT パラメーターを変更しない限り、結果はDATEのように表示され、時間コンポーネントが隠されてしまいます。
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
AsTimestamp + 1 FROM
TIMES;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Number AND unknown ***/!!! 1 + AsTimestamp FROM
TIMES;
結果¶
ASTIMESTAMP + INTERVAL '1 DAY' |
|---|
2021-11-06 11:00:00.000 |
DATEADD_UDF¶
日付やタイムスタンプ型と不明の型との加算操作がある場合、ユーザー定義関数(UDF)が追加されます。現在のUDFの実装は こちら で確認できます。UDFはUDFsフォルダーにあります。例:
注釈
以下の例では、Unknown型列をシミュレートするためにサブクエリを使用します。
Oracle¶
SELECT AsDate + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM TIMES) FROM TIMES;
SELECT AsTimestamp + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM TIMES) FROM TIMES;
結果¶
ASDATE+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES) |
|---|
2021-11-11 00:00:00.000 |
ASTIMESTAMP+(SELECTEXTRACT(DAYFROMASTIMESTAMPTWO)FROMTIMES) |
|---|
2021-11-10 11:00:00.000 |
Snowflake¶
SELECT AsDate + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM
TIMES
) FROM
TIMES;
SELECT AsTimestamp + (SELECT EXTRACT(DAY FROM AsTimestampTwo) FROM
TIMES
) FROM
TIMES;
結果¶
PUBLIC.DATEADD_UDF( ASDATE, (SELECT EXTRACT(DAY FROM ASTIMESTAMPTWO) FROM PUBLIC.TIMES)) |
|---|
2021-11-11 |
PUBLIC.DATEADD_UDF( ASTIMESTAMP, (SELECT EXTRACT(DAY FROM ASTIMESTAMPTWO) FROM PUBLIC.TIMES)) |
|---|
2021-11-10 11:00:00.000 |
減算¶
組み合わせマトリックス¶
減算 |
Date |
タイムスタンプ |
Number |
間隔 |
不明 |
Float |
|---|---|---|---|---|---|---|
Date |
DATEDIFF |
TIMESTAMP_DIFF___UDF |
Date -間隔(日) |
Date -間隔(IntervalUnit) |
DATEDIFF_UDF |
DATEDIFF_UDF |
タイムスタンプ |
TIMESTAMP_DIFF___UDF |
TIMESTAMP_DIFF___UDF |
タイムスタンプ-間隔(日) |
タイムスタンプ-間隔(IntervalUnit) |
DATEDIFF_UDF |
DATEDIFF_UDF |
Number |
INVALID |
INVALID |
Number - Number |
INVALID |
Number - Float |
|
間隔 |
INVALID |
INVALID |
INVALID |
不明-間隔(IntervalUnit) |
NOT SUPPORTED IN ORACLE |
|
不明 |
DATEDIFF_UDF |
DATEDIFF_UDF |
不明-間隔(IntervalUnit) |
|||
Float |
DATEDIFF_UDF |
DATEDIFF_UDF |
Float - Number |
NOT SUPPORTED IN ORACLE |
Float - Float |
注釈
不明型の列は、マイグレーターがその列が含むデータ型を確立できなかった結果です。例えば、操作対象のテーブルのDDLs、ビューへの操作の結果の列、CTES、またはサブクエリなどがない場合です。
警告
デフォルトで、Snow ConvertはDate/Timestamp + Interval型の操作をネイティブのSnowflakeの操作に移行しますが、場合によっては代わりに UDF を使用すると便利なことがあります。このUDFについての詳細は こちら をご参照ください。
マイグレーターが減算操作を解決するために使用できるさまざまなパスについて、以下に説明します。
無効¶
Oracleで減算操作を行う場合、特定の組み合わせは無効です。
Oracle¶
SELECT 1 - AsDate FROM TIMES;
SELECT 1 - AsTimestamp FROM TIMES;
結果¶
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got DATE
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP
DATEDIFF¶
日付型の2つのオペランド間の減算は、時間単位(最初のパラメーター)として'day'を使用して、Snowflake DATEDIFF関数に変換されます。例
Oracle¶
SELECT AsDate - AsDateTwo FROM TIMES;
結果¶
ASDATE-ASDATETWO |
|---|
1 |
Snowflake¶
SELECT AsDate - AsDateTwo FROM
TIMES;
結果¶
DATEDIFF(DAY, ASDATETWO, ASDATE) |
|---|
1 |
Date -間隔(日)¶
これは、日付型と数値の間の減算操作に対する現在の変換です。例
Oracle¶
SELECT AsDate - 1 FROM TIMES;
SELECT AsDate + -1 FROM TIMES;
結果¶
ASDATE-1 |
|---|
2021-11-05 00:00:00.000 |
ASDATE+-1 |
|---|
2021-11-05 00:00:00.000 |
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
AsDate - 1 FROM
TIMES;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! AsDate + -1 FROM
TIMES;
結果¶
ASDATE - INTERVAL '1 DAY' |
|---|
2021-11-05 |
ASDATE + INTERVAL '-1 DAY' |
|---|
2021-11-05 |
タイムスタンプ-間隔(日)¶
これは、タイムスタンプ型と数値の加算操作のための現在の変換です。例
Oracle¶
SELECT AsTimestamp - 1 FROM TIMES;
SELECT AsTimestamp + -1 FROM TIMES;
結果¶
ASTIMESTAMP-1 |
|---|
2021-11-04 11:00:00.000 |
ASTIMESTAMP+-1 |
|---|
2021-11-04 11:00:00.000 |
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '-' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!!
AsTimestamp - 1 FROM
TIMES;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN unknown AND Number ***/!!! AsTimestamp + -1 FROM
TIMES;
結果¶
ASTIMESTAMP - INTERVAL '1 DAY' |
|---|
2021-11-04 11:00:00.000 |
ASTIMESTAMP + INTERVAL '-1 DAY' |
|---|
2021-11-04 11:00:00.000 |
注釈
注意:Oracleでは、DATEとTIMESTAMP列の両方が時間コンポーネントを含んでいますが、Oracleは NLS_DATE_FORMAT パラメーターで指定されたフォーマットマスクを使用して、日付を暗黙的に文字列に変換する方法を決定しています。そのため、TIMESTAMPと Interval の間でいくつかの操作を実行すると、 NLS_DATE_FORMAT パラメーターを変更しない限り、結果はDATEのように表示され、時間コンポーネントが隠されてしまいます。
NLS_DATE_FORMAT フォーマットの詳細については、 こちら をご覧ください。
TIMESTAMP_DIFF_UDF¶
タイムスタンプ型とタイムスタンプ付き日付の間の減算、およびその逆は、 TIMESTAMP_DIFF_UDF ユーザ定義関数(実装は こちら)を挿入することで解決されます。例
Oracle¶
SELECT AsTimeStamp - AsTimeStampTwo FROM TIMES;
SELECT AsTimeStamp - AsDateTwo FROM TIMES;
SELECT AsDateTwo - AsTimeStamp FROM TIMES;
結果¶
ASTIMESTAMP-ASTIMESTAMPTWO |
|---|
+000000000 01:00:00.000000 |
ASTIMESTAMP-ASDATETWO |
|---|
+000000000 11:00:00.000000 |
ASDATETWO-ASTIMESTAMP |
|---|
-000000000 11:00:00.000000 |
Snowflake¶
SELECT AsTimeStamp - AsTimeStampTwo FROM
TIMES;
SELECT AsTimeStamp - AsDateTwo FROM
TIMES;
SELECT AsDateTwo - AsTimeStamp FROM
TIMES;
結果¶
PUBLIC.TIMESTAMP_DIFF_UDF( ASTIMESTAMP, ASTIMESTAMPTWO) |
|---|
+000000000 01:00:00.00000000 |
PUBLIC.TIMESTAMP_DIFF_UDF( ASTIMESTAMP, ASDATETWO) |
|---|
+000000000 11:00:00.00000000 |
PUBLIC.TIMESTAMP_DIFF_UDF( ASDATETWO, ASTIMESTAMP) |
|---|
-000000000 -11:00:00.00000000 |
DATEDIFF_UDF¶
日付やタイムスタンプ型と不明の型との加算操作がある場合、ユーザー定義関数(UDF)が追加されます。UDFの実装は こちら で確認できますが、必要なことを実行するように編集することができます。UDFはUDFsフォルダーにあります。例:
Oracle¶
SELECT ASDATE - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
SELECT ASTIMESTAMP - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
結果¶
ASDATE-(EXTRACT(DAYFROMASDATE)) |
|---|
2021-10-31 00:00:00.000 |
ASTIMESTAMP-(EXTRACT(DAYFROMASDATE)) |
|---|
2021-10-30 11:00:00.000 |
Snowflake¶
SELECT ASDATE - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
SELECT ASTIMESTAMP - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
結果¶
PUBLIC.DATEDIFF_UDF( ASDATE, (EXTRACT(DAY FROM ASDATE))) |
|---|
2021-10-31 |
PUBLIC.DATEDIFF_UDF( ASTIMESTAMP, (EXTRACT(DAY FROM ASDATE))) |
|---|
2021-10-30 11:00:00.000 |
よくあるケース¶
警告:SSC-EWI-OR0036¶
この警告は、オペランドのデータ型によって加減算が正しく動作しない可能性があることを示すために使用されます。つまり、Snowflakeでの操作結果は、Oracleと機能的に同等ではないということです。日付型や数値型と不明型の足し算や引き算は、最も一般的なケースのひとつです。例
Oracle¶
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM TIMES;
Snowflake¶
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
このEWIは、列の型が解決できなかった操作で追加されます。列のタイプがINTERVALで、他の間隔型とのみ操作される場合、EWIが追加されますが、コードはコメントアウトされません。次の例では、この動作を説明します。
Oracle¶
SELECT INTERVAL '1' DAY + interval_column FROM UNKNOWN_TABLE;
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!!
interval_column + INTERVAL '1 day' FROM
UNKNOWN_TABLE;
既知の問題¶
1. TIMESTAMP DIFF UDF improvement¶
TIMESTAMP_DIFF_UDFを改善し、返される型を指定できるようにする必要があります。これは、例えば日、時間、月など、時間部分を指定できる第3のパラメーターを追加することを意味します。
2.演算子としての組み込み関数¶
現在、日付型を返す組み込み関数間の日付操作の管理は行われていません。
3.複数のオペランド¶
現在のところ、2つ以上のオペランドを持つ日付操作のための管理はありません。
4.比較演算子¶
現在のところ、より大きい、より小さいなどの比較演算子による日付操作の管理はありません。
5.出力形式¶
算術演算の結果の書式は、Snowflakeではコマンド ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DESIRED-FORMAT'; で変更できます。
6.秒精度の間隔の操作における問題点¶
一部の操作、特に秒単位の制度を持つ間隔を含むものは、制度が異なる可能性があります。これは、Oracleが精度に応じて四捨五入を行うためで、Snowflakeの間隔は小数点以下の秒をサポートしていないため、同じ結果を得るためには、Oracleが行う四捨五入を考慮して、間隔の小数点以下2桁目をミリ秒単位で変更する必要があります。次の例はこの問題を示しています。
Oracle¶
SELECT AsTimeStamp+INTERVAL '15.6789' SECOND(2,3) FROM times;
SELECT AsTimeStamp+INTERVAL '15.6783' SECOND(2,3) FROM times;
結果¶
ASTIMESTAMP+INTERVAL'15.6789'SECOND(2,3) |
|---|
2021-11-05 11:00:15.679 |
ASTIMESTAMP+INTERVAL'15.6783'SECOND(2,3) |
|---|
2021-11-05 11:00:15.678 |
Snowflake¶
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!!
AsTimeStamp + INTERVAL '15.6789 second'
FROM
times;
SELECT
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0036 - TYPES RESOLUTION ISSUES, ARITHMETIC OPERATION '+' MAY NOT BEHAVE CORRECTLY BETWEEN Unknown AND Interval ***/!!! AsTimeStamp + INTERVAL '15.6783 second'
FROM
times;
結果¶
ASTIMESTAMP + INTERVAL '15.6789 SECOND' |
|---|
2021-11-05 11:00:16.000 |
ASTIMESTAMP + INTERVAL '15.6783 SECOND' |
|---|
2021-11-05 11:00:16.000 |
ASTIMESTAMP + INTERVAL '15 SECOND, 679 MILLISECOND' |
|---|
2021-11-05 11:00:15.679 |
ASTIMESTAMP + INTERVAL '15 SECOND, 678 MILLISECOND' |
|---|
2021-11-05 11:00:15.678 |
関連 EWIs¶
SSC-EWI-0108:以下のサブクエリは、無効とみなされるパターンの少なくとも1つに一致し、コンパイルエラーが発生する可能性があります。
SSC-EWI-OR0036:型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
間隔 UDFs とSnowflakeネイティブの間隔操作¶
説明¶
以下の表は、間隔の演算に関する DATEADD_UDF INTERVAL and DATEDIFF_UDF INTERVAL と Snowflakeネイティブ操作 の比較を示しています。
必要なコード¶
比較テーブルのクエリを実行するには、以下のコードを実行する必要があります。
CREATE OR REPLACE TABLE TIMES(
AsTimeStamp TIMESTAMP,
AsTimestampTwo TIMESTAMP,
AsDate DATE,
AsDateTwo DATE
);
INSERT INTO TIMES VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
CREATE TABLE UNKNOWN_TABLE(
Unknown timestamp
);
INSERT INTO UNKNOWN_TABLE VALUES (
TO_TIMESTAMP('01/10/09, 12:00 P.M.', 'dd/mm/yy, hh:mi P.M.')
);
CREATE OR REPLACE TABLE TIMES (
AsTimeStamp TIMESTAMP(6),
AsTimestampTwo TIMESTAMP(6),
AsDate TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/,
AsDateTwo TIMESTAMP /*** SSC-FDM-OR0042 - DATE TYPE COLUMN HAS A DIFFERENT BEHAVIOR IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
INSERT INTO TIMES
VALUES (
TO_TIMESTAMP('05/11/21, 11:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_TIMESTAMP('05/11/21, 10:00 A.M.', 'dd/mm/yy, hh:mi A.M.'),
TO_DATE('06/11/21', 'dd/mm/yy'),
TO_DATE('05/11/21', 'dd/mm/yy'));
CREATE OR REPLACE TABLE UNKNOWN_TABLE (
Unknown TIMESTAMP(6)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
;
INSERT INTO UNKNOWN_TABLE
VALUES (
TO_TIMESTAMP('01/10/09, 12:00 P.M.', 'dd/mm/yy, hh:mi P.M.')
);
比較テーブル¶
Oracle¶
SELECT AsTimeStamp+INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1' MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1' MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '2' MONTH FROM TIMES;
SELECT AsTimeStamp-INTERVAL '2' MONTH FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsTimeStamp-INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsTimeStamp+INTERVAL '10' DAY FROM TIMES;
SELECT AsTimeStamp-INTERVAL '10' DAY FROM TIMES;
SELECT AsTimeStamp+INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '5' HOUR FROM TIMES;
SELECT AsTimeStamp-INTERVAL '5' HOUR FROM TIMES;
SELECT AsTimeStamp+INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsTimeStamp-INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsTimeStamp+INTERVAL '30' MINUTE FROM TIMES;
SELECT AsTimeStamp-INTERVAL '30' MINUTE FROM TIMES;
SELECT AsTimeStamp+INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsTimeStamp+INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsTimeStamp-INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsDate+INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsDate-INTERVAL '1-1' YEAR(2) TO MONTH FROM TIMES;
SELECT AsDate+INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsDate-INTERVAL '2-1' YEAR(4) TO MONTH FROM TIMES;
SELECT AsDate+INTERVAL '1' MONTH FROM TIMES;
SELECT AsDate-INTERVAL '1' MONTH FROM TIMES;
SELECT AsDate+INTERVAL '2' MONTH FROM TIMES;
SELECT AsDate-INTERVAL '2' MONTH FROM TIMES;
SELECT AsDate+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsDate-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM TIMES;
SELECT AsDate+INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '1 01:10' DAY TO MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsDate-INTERVAL '1 1' DAY TO HOUR FROM TIMES;
SELECT AsDate+INTERVAL '10' DAY FROM TIMES;
SELECT AsDate-INTERVAL '10' DAY FROM TIMES;
SELECT AsDate+INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '3:05' HOUR TO MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '5' HOUR FROM TIMES;
SELECT AsDate-INTERVAL '5' HOUR FROM TIMES;
SELECT AsDate+INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsDate-INTERVAL '5:10' MINUTE TO SECOND FROM TIMES;
SELECT AsDate+INTERVAL '30' MINUTE FROM TIMES;
SELECT AsDate-INTERVAL '30' MINUTE FROM TIMES;
SELECT AsDate+INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsDate-INTERVAL '333' HOUR(3) FROM TIMES;
SELECT AsDate+INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT AsDate-INTERVAL '15.6789' SECOND(2,3) FROM TIMES;
SELECT Unknown+INTERVAL '1-1' YEAR(2) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1-1' YEAR(2) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '2-1' YEAR(4) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '2-1' YEAR(4) TO MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '2' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '2' MONTH FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 01:00:00.222' DAY TO SECOND(3) FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 01:10' DAY TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 01:10' DAY TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '1 1' DAY TO HOUR FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '1 1' DAY TO HOUR FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '10' DAY FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '10' DAY FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '3:05' HOUR TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '3:05' HOUR TO MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '5' HOUR FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '5' HOUR FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '5:10' MINUTE TO SECOND FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '5:10' MINUTE TO SECOND FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '30' MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '30' MINUTE FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '333' HOUR(3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '333' HOUR(3) FROM UNKNOWN_TABLE;
SELECT Unknown+INTERVAL '15.6789' SECOND(2,3) FROM UNKNOWN_TABLE;
SELECT Unknown-INTERVAL '15.6789' SECOND(2,3) FROM UNKNOWN_TABLE;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+ AsTimeStamp FROM TIMES;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+AsDate FROM TIMES;
SELECT INTERVAL '1-1' YEAR(2) TO MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+AsDate FROM TIMES;
SELECT INTERVAL '2-1' YEAR(4) TO MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1' MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1' MONTH+AsDate FROM TIMES;
SELECT INTERVAL '1' MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '2' MONTH+AsTimeStamp FROM TIMES;
SELECT INTERVAL '2' MONTH+AsDate FROM TIMES;
SELECT INTERVAL '2' MONTH+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+AsDate FROM TIMES;
SELECT INTERVAL '1 01:00:00.222' DAY TO SECOND(3)+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '1 01:10' DAY TO MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '1 1' DAY TO HOUR+AsTimeStamp FROM TIMES;
SELECT INTERVAL '1 1' DAY TO HOUR+AsDate FROM TIMES;
SELECT INTERVAL '1 1' DAY TO HOUR+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '10' DAY+AsTimeStamp FROM TIMES;
SELECT INTERVAL '10' DAY+AsDate FROM TIMES;
SELECT INTERVAL '10' DAY+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '3:05' HOUR TO MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '3:05' HOUR TO MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '3:05' HOUR TO MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '5' HOUR+AsTimeStamp FROM TIMES;
SELECT INTERVAL '5' HOUR+AsDate FROM TIMES;
SELECT INTERVAL '5' HOUR+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '5:10' MINUTE TO SECOND+AsTimeStamp FROM TIMES;
SELECT INTERVAL '5:10' MINUTE TO SECOND+AsDate FROM TIMES;
SELECT INTERVAL '5:10' MINUTE TO SECOND+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '30' MINUTE+AsTimeStamp FROM TIMES;
SELECT INTERVAL '30' MINUTE+AsDate FROM TIMES;
SELECT INTERVAL '30' MINUTE+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '333' HOUR(3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '333' HOUR(3)+AsDate FROM TIMES;
SELECT INTERVAL '333' HOUR(3)+Unknown FROM UNKNOWN_TABLE;
SELECT INTERVAL '15.6789' SECOND(2,3)+AsTimeStamp FROM TIMES;
SELECT INTERVAL '15.6789' SECOND(2,3)+AsDate FROM TIMES;
SELECT INTERVAL '15.6789' SECOND(2,3)+Unknown FROM UNKNOWN_TABLE;
Snowflake¶
SELECT AsTimeStamp + INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsTimeStamp + INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsTimeStamp - INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '2y, 1mm' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1 month' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '2 month' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 01h, 10m' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '1d, 1h' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '10 day' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '3h, 05m' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '5 hour' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '5m, 10s' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '30 minute' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '333 hour' FROM PUBLIC.TIMES;
SELECT AsDate + INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT AsDate - INTERVAL '15.6789 second' FROM PUBLIC.TIMES;
SELECT Unknown + INTERVAL '1y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '2y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '2y, 1mm' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '2 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '2 month' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 01h, 00m, 00s, 222ms' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 01h, 10m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 01h, 10m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '1d, 1h' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '1d, 1h' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '10 day' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '10 day' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '3h, 05m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '3h, 05m' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '5 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '5 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '5m, 10s' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '5m, 10s' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '30 minute' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '30 minute' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '333 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '333 hour' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown + INTERVAL '15.6789 second' FROM PUBLIC.UNKNOWN_TABLE;
SELECT Unknown - INTERVAL '15.6789 second' FROM PUBLIC.UNKNOWN_TABLE;
Snowflake UDF¶
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsTimeStamp,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsTimeStamp,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''2'' MONTH') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''10'' DAY') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''5'' HOUR') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''30'' MINUTE') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(AsDate,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEDIFF_UDF(AsDate,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.TIMES;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1-1'' YEAR(2) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''2-1'' YEAR(4) TO MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''2'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''2'' MONTH') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 01:00:00.222'' DAY TO SECOND(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 01:10'' DAY TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''1 1'' DAY TO HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''10'' DAY') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''10'' DAY') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''3:05'' HOUR TO MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''5'' HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''5'' HOUR') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''5:10'' MINUTE TO SECOND') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''30'' MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''30'' MINUTE') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''333'' HOUR(3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEADD_UDF(UnKnown,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.UNKNOWN_TABLE;
SELECT DATEDIFF_UDF(UnKnown,'INTERVAL ''15.6789'' SECOND(2,3)') FROM PUBLIC.UNKNOWN_TABLE;
結果¶
Oracle |
Snowflake操作 |
UDF |
|---|---|---|
2022-12-05 11:00:00.000 |
2022-12-05 11:00:00.000 |
2022-12-05 11:00:00.000 |
2020-10-05 11:00:00.000 |
2020-10-05 11:00:00.000 |
2020-10-05 11:00:00.000 |
2023-12-05 11:00:00.000 |
2023-12-05 11:00:00.000 |
2023-12-05 11:00:00.000 |
2019-10-05 11:00:00.000 |
2019-10-05 11:00:00.000 |
2019-10-05 11:00:00.000 |
2021-12-05 11:00:00.000 |
2021-12-05 11:00:00.000 |
2021-12-05 11:00:00.000 |
2021-10-05 11:00:00.000 |
2021-10-05 11:00:00.000 |
2021-10-05 11:00:00.000 |
2022-01-05 11:00:00.000 |
2022-01-05 11:00:00.000 |
2022-01-05 11:00:00.000 |
2021-09-05 11:00:00.000 |
2021-09-05 11:00:00.000 |
2021-09-05 11:00:00.000 |
2021-11-06 12:00:00.222 |
2021-11-06 12:00:00.222 |
2021-11-06 12:00:00.222 |
2021-11-04 09:59:59.778 |
2021-11-04 09:59:59.778 |
2021-11-04 09:59:59.778 |
2021-11-06 12:10:00.000 |
2021-11-06 12:10:00.000 |
2021-11-06 12:10:00.000 |
2021-11-04 09:50:00.000 |
2021-11-04 09:50:00.000 |
2021-11-04 09:50:00.000 |
2021-11-06 12:00:00.000 |
2021-11-06 12:00:00.000 |
2021-11-06 12:00:00.000 |
2021-11-04 10:00:00.000 |
2021-11-04 10:00:00.000 |
2021-11-04 10:00:00.000 |
2021-11-15 11:00:00.000 |
2021-11-15 11:00:00.000 |
2021-11-15 11:00:00.000 |
2021-10-26 11:00:00.000 |
2021-10-26 11:00:00.000 |
2021-10-26 11:00:00.000 |
2021-11-05 14:05:00.000 |
2021-11-05 14:05:00.000 |
2021-11-05 14:05:00.000 |
2021-11-05 07:55:00.000 |
2021-11-05 07:55:00.000 |
2021-11-05 07:55:00.000 |
2021-11-05 16:00:00.000 |
2021-11-05 16:00:00.000 |
2021-11-05 16:00:00.000 |
2021-11-05 06:00:00.000 |
2021-11-05 06:00:00.000 |
2021-11-05 06:00:00.000 |
2021-11-05 11:05:10.000 |
2021-11-05 11:05:10.000 |
2021-11-05 11:05:10.000 |
2021-11-05 10:54:50.000 |
2021-11-05 10:54:50.000 |
2021-11-05 10:54:50.000 |
2021-11-05 11:30:00.000 |
2021-11-05 11:30:00.000 |
2021-11-05 11:30:00.000 |
2021-11-05 10:30:00.000 |
2021-11-05 10:30:00.000 |
2021-11-05 10:30:00.000 |
2021-11-19 08:00:00.000 |
2021-11-19 08:00:00.000 |
2021-11-19 08:00:00.000 |
2021-10-22 14:00:00.000 |
2021-10-22 14:00:00.000 |
2021-10-22 14:00:00.000 |
2021-11-05 11:00:15.679 |
2021-11-05 11:00:16.000 |
2021-11-05 11:00:15.678 |
2021-11-05 10:59:44.321 |
2021-11-05 10:59:44.000 |
2021-11-05 11:00:15.678 |
2022-12-06 00:00:00.000 |
2022-12-06 |
2022-12-06 |
2020-10-06 00:00:00.000 |
2020-10-06 |
2020-10-06 |
2023-12-06 00:00:00.000 |
2023-12-06 |
2023-12-06 |
2019-10-06 00:00:00.000 |
2019-10-06 |
2019-10-06 |
2021-12-06 00:00:00.000 |
2021-12-06 |
2021-12-06 |
2021-12-06 00:00:00.000 |
2021-10-06 |
2021-10-06 |
2022-01-06 00:00:00.000 |
2022-01-06 |
2022-01-06 |
2021-09-06 00:00:00.000 |
2021-09-06 |
2021-09-06 |
2021-11-07 01:00:00.000 |
2021-11-07 01:00:00.222 |
2021-11-07 |
2021-11-04 22:59:59.000 |
2021-11-04 22:59:59.778 |
2021-11-04 |
2021-11-07 01:10:00.000 |
2021-11-07 01:10:00.000 |
2021-11-07 |
2021-11-04 22:50:00.000 |
2021-11-04 22:50:00.000 |
2021-11-04 |
2021-11-07 01:00:00.000 |
2021-11-07 01:00:00.000 |
2021-11-07 |
2021-11-04 23:00:00.000 |
2021-11-04 23:00:00.000 |
2021-11-04 |
2021-11-16 00:00:00.000 |
2021-11-16 |
2021-11-16 |
2021-10-27 00:00:00.000 |
2021-10-27 |
2021-10-27 |
2021-11-06 03:05:00.000 |
2021-11-06 03:05:00.000 |
2021-11-06 |
2021-11-05 20:55:00.000 |
2021-11-05 20:55:00.000 |
2021-11-05 |
2021-11-06 05:00:00.000 |
2021-11-06 05:00:00.000 |
2021-11-06 |
2021-11-05 19:00:00.000 |
2021-11-05 19:00:00.000 |
2021-11-05 |
2021-11-06 00:05:10.000 |
2021-11-06 00:05:10.000 |
2021-11-06 |
2021-11-05 23:54:50.000 |
2021-11-05 23:54:50.000 |
2021-11-05 |
2021-11-06 00:30:00.000 |
2021-11-06 00:30:00.000 |
2021-11-06 |
2021-11-05 23:30:00.000 |
2021-11-05 23:30:00.000 |
2021-11-05 |
2021-11-19 21:00:00.000 |
2021-11-19 21:00:00.000 |
2021-11-19 |
2021-10-23 03:00:00.000 |
2021-10-23 03:00:00.000 |
2021-10-23 |
2021-11-06 00:00:15.000 |
2021-11-06 00:00:16.000 |
2021-11-06 |
2021-11-05 23:59:44.000 |
2021-11-05 23:59:44.000 |
2021-11-05 |
2010-11-01 12:00:00.000 |
2010-11-01 12:00:00.000 |
2010-11-01 12:00:00.000 |
2008-09-01 12:00:00.000 |
2008-09-01 12:00:00.000 |
2008-09-01 12:00:00.000 |
2011-11-01 12:00:00.000 |
2011-11-01 12:00:00.000 |
2011-11-01 12:00:00.000 |
2007-09-01 12:00:00.000 |
2007-09-01 12:00:00.000 |
2007-09-01 12:00:00.000 |
2009-11-01 12:00:00.000 |
2009-11-01 12:00:00.000 |
2009-11-01 12:00:00.000 |
2009-09-01 12:00:00.000 |
2009-09-01 12:00:00.000 |
2009-09-01 12:00:00.000 |
2009-12-01 12:00:00.000 |
2009-12-01 12:00:00.000 |
2009-12-01 12:00:00.000 |
2009-08-01 12:00:00.000 |
2009-08-01 12:00:00.000 |
2009-08-01 12:00:00.000 |
2009-10-02 13:00:00.222 |
2009-10-02 13:00:00.222 |
2009-10-02 13:00:00.222 |
2009-09-30 10:59:59.778 |
2009-09-30 10:59:59.778 |
2009-09-30 10:59:59.778 |
2009-10-02 13:10:00.000 |
2009-10-02 13:10:00.000 |
2009-10-02 13:10:00.000 |
2009-09-30 10:50:00.000 |
2009-09-30 10:50:00.000 |
2009-09-30 10:50:00.000 |
2009-10-02 13:00:00.000 |
2009-10-02 13:00:00.000 |
2009-10-02 13:00:00.000 |
2009-09-30 11:00:00.000 |
2009-09-30 11:00:00.000 |
2009-09-30 11:00:00.000 |
2009-10-11 12:00:00.000 |
2009-10-11 12:00:00.000 |
2009-10-11 12:00:00.000 |
2009-09-21 12:00:00.000 |
2009-09-21 12:00:00.000 |
2009-09-21 12:00:00.000 |
2009-10-01 15:05:00.000 |
2009-10-01 15:05:00.000 |
2009-10-01 15:05:00.000 |
2009-10-01 08:55:00.000 |
2009-10-01 08:55:00.000 |
2009-10-01 08:55:00.000 |
2009-10-01 17:00:00.000 |
2009-10-01 17:00:00.000 |
2009-10-01 17:00:00.000 |
2009-10-01 07:00:00.000 |
2009-10-01 07:00:00.000 |
2009-10-01 07:00:00.000 |
2009-10-01 12:05:10.000 |
2009-10-01 12:05:10.000 |
2009-10-01 12:05:10.000 |
2009-10-01 11:54:50.000 |
2009-10-01 11:54:50.000 |
2009-10-01 11:54:50.000 |
2009-10-01 12:30:00.000 |
2009-10-01 12:30:00.000 |
2009-10-01 12:30:00.000 |
2009-10-01 11:30:00.000 |
2009-10-01 11:30:00.000 |
2009-10-01 11:30:00.000 |
2009-10-15 09:00:00.000 |
2009-10-15 09:00:00.000 |
2009-10-15 09:00:00.000 |
2009-09-17 15:00:00.000 |
2009-09-17 15:00:00.000 |
2009-09-17 15:00:00.000 |
2009-10-01 12:00:15.679 |
2009-10-01 12:00:16.000 |
2009-10-01 12:00:15.678 |
2009-10-01 11:59:44.321 |
2009-10-01 11:59:44.000 |
2009-10-01 11:59:44.321 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-FDM-OR0042:Timestamp に変換された Date 型の動作が異なる
PL SQLデータ型¶
BINARY_INTEGER データ型¶
このデータ型は、 PLS_INTEGER データ型と同じです。
PLS_INTEGER データ型¶
説明¶
PLS_INTEGERデータ型は32ビットで表現される-2,147,483,648~2,147,483,647の範囲の符号付き整数を格納します。(Oracle言語リファレンス PLS_INTEGER データ型)
PLS_INTEGER データ型は NUMBER に変換されます。この変換は、 PLS_INTEGER の各サブタイプにも適用されます。
NATURALNATURALNPOSITIVEPOSITIVENSIGNTYPESIMPLE_INTEGER
警告
これらのサブタイプのいくつかは、現在SnowConvert AIで認識されていないため、 VARIANT に変換され、ユーザー定義タイプとみなされます。この問題を解決するための作業項目はすでにあります。
サンプルソースパターン¶
以下のテーブルとその挿入例をご覧ください。
コード¶
CREATE TABLE PLS_INTEGER_TABLE(
COL NUMBER
);
プロシージャブロックでの PLS_INTEGER の使用¶
Oracle¶
CREATE OR REPLACE PROCEDURE PLS_INTEGER_EXAMPLE
IS
-- PLS_INTEGER AND BINARY INTEGER ALIASES
PLS_INTEGER_VAR PLS_INTEGER;
BINARY_INTEGER_VAR BINARY_INTEGER;
NUMBER_VAR NUMBER;
BEGIN
NUMBER_VAR := 2;
-- maximum possible value
PLS_INTEGER_VAR := 2147483647;
-- implicit cast to number
INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR);
PLS_INTEGER_VAR := 2147483647;
-- operations with other numeric expressions
INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR + 1);
INSERT INTO PLS_INTEGER_TABLE (COL) VALUES (PLS_INTEGER_VAR + NUMBER_VAR);
END;
CALL PLS_INTEGER_EXAMPLE();
SELECT * FROM PLS_INTEGER_TABLE;
結果¶
COL |
|---|
2147483647 |
2147483648 |
2147483649 |
Snowflake¶
CREATE OR REPLACE PROCEDURE PLS_INTEGER_EXAMPLE ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
DECLARE
-- PLS_INTEGER AND BINARY INTEGER ALIASES
PLS_INTEGER_VAR NUMBER;
BINARY_INTEGER_VAR NUMBER;
NUMBER_VAR NUMBER(38, 18);
BEGIN
NUMBER_VAR := 2;
-- maximum possible value
PLS_INTEGER_VAR := 2147483647;
-- implicit cast to number
INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR);
PLS_INTEGER_VAR := 2147483647;
-- operations with other numeric expressions
INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR + 1);
INSERT INTO PLS_INTEGER_TABLE(COL) VALUES (:PLS_INTEGER_VAR + :NUMBER_VAR);
END;
$$;
CALL PLS_INTEGER_EXAMPLE();
SELECT * FROM
PLS_INTEGER_TABLE;
結果¶
COL |
|---|
2147483647 |
2147483648 |
2147483649 |
既知の問題¶
1.ストレージとパフォーマンス機能は維持されませんでした¶
Oracle PLS_INTEGER は、ストレージサイズと算術演算のパフォーマンスという点でいくつかの利点があります。Snowflake NUMBER にはこれらの機能がないため、これらの機能はエミュレートされませんでした。詳細情報については、 PLS_INTEGER ドキュメントをご覧ください。
関連 EWIs¶
関連 EWIs はありません。
文字データ型¶
文字データ型は、単語および自由形式のテキストである文字(英数字)データを、データベースの文字セットまたは国別文字セットで格納します。(Oracle SQL Language Reference Character Data Types)
CHAR データ型¶
説明¶
CHARデータ型は、データベースの文字セット内の 固定 長の文字列を指定します。(Oracle SQL 言語リファレンス CHAR データ型)
Oracleのドキュメントで示されているように、 CHAR データ型のサイズは長さの制約であり、容量と混同しないでください。CHAR に格納できる文字の合計は、データベースの文字セットや構成によって異なりますが、一般的に許容される最大サイズは2000です。
Snowflakeでは、 CHAR 型は VARCHAR と同義であり、ここで確認できます。
Snowflake SQL 言語リファレンステキストデータ型
標準最大サイズはかなり大きいです。しかし、これはSnowflake VARCHAR がより多くのストレージを消費することを意味するものではありません。これはドキュメントにも記載されています。
VARCHAR(16777216)列の1文字列は1文字しか消費しません。
CHAR [ (size [ BYTE | CHAR ]) ]
サンプルソースパターン¶
テーブル作成時のCharデータ型¶
Oracle¶
CREATE TABLE char_data_types
(
char_column1 CHAR,
char_column2 CHAR(15),
char_column3 CHAR(15 BYTE),
char_column4 CHAR(15 CHAR)
);
INSERT INTO char_data_types VALUES ('H', 'Hello world', 'Hello world', 'Hello world');
Snowflake¶
CREATE OR REPLACE TABLE char_data_types
(
char_column1 CHAR,
char_column2 CHAR(15),
char_column3 CHAR(15),
char_column4 CHAR(15)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO char_data_types
VALUES ('H', 'Hello world', 'Hello world', 'Hello world');
char列からのデータの取得¶
Oracle¶
SELECT * FROM char_data_types;
結果¶
CHAR_COLUMN1 |
CHAR_COLUMN2 |
CHAR_COLUMN3 |
CHAR_COLUMN4 |
|---|---|---|---|
H |
Hello world |
Hello world |
Hello world |
Snowflake¶
SELECT * FROM
char_data_types;
結果¶
CHAR_COLUMN1 |
CHAR_COLUMN2 |
CHAR_COLUMN3 |
CHAR_COLUMN4 |
|---|---|---|---|
H |
Hello world |
Hello world |
Hello world |
注釈
Oracleでは、列定義で決定された固定サイズに合わせて値が空白で埋められます。一方、Snowflakeは動的サイズ(長さの制限を維持)を使用して値を格納します。
CHAR の内部データ型をチェックする¶
冒頭で述べたように、Snowflakeは内部的に CHAR 型の列に VARCHAR を使用しており、テーブルを記述することでそれを確認できます。
Oracle¶

Snowflake¶

注釈
長さの制限は維持されますが、列が使用するメモリは DBMS ごとに異なります。
各列のサイズをバイト単位で取得します。¶
Oracle¶
SELECT
LENGTHB(char_column1),
LENGTHB(char_column2),
LENGTHB(char_column3),
LENGTHB(char_column4)
FROM char_data_types;
結果¶
LENGTHB(CHAR_COLUMN1) |
LENGTHB(CHAR_COLUMN2) |
LENGTHB(CHAR_COLUMN3) |
LENGTHB(CHAR_COLUMN4) |
|---|---|---|---|
1 |
15 |
15 |
15 |
Snowflake¶
SELECT
OCTET_LENGTH(char_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column3) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(char_column4) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
char_data_types;
結果¶
OCTET_LENGTH(CHAR_COLUMN1) |
OCTET_LENGTH(CHAR_COLUMN2) |
OCTET_LENGTH(CHAR_COLUMN3) |
OCTET_LENGTH(CHAR_COLUMN4) |
|---|---|---|---|
1 |
11 |
11 |
11 |
注意
このようなわずかな違いもありますが、データの統合は保たれています。
既知の問題¶
1.一部の組み込み関数から得られる結果は異なる場合があります
前のセクションで説明したように、列に対して組み込み関数を使用すると、異なる結果を取得する場合があります。例えば、列の長さを取得します。
関連 EWIs¶
SSC-FDM-OR0015: LENGTHB が OCTET_LENGTH に変換されました。
NCHAR データ型¶
説明¶
NCHAR データ型は、国文字セットの 固定 長の文字列を指定します。(Oracle SQL 言語リファレンス NCHAR)
NCHAR では、Unicodeで特殊文字を保存して、どのような使用状況でも保持することができますが、これらの特殊文字を保存するには、より多くのビットが必要になる場合があります。そのため、デフォルトでは、 NCHAR 文字セットは AL16UTF16 であり、これは通常 AL32UTF8 である CHAR の共通文字データセットとは対照的です。
NCHAR はSnowflakeでは NCHAR として保存されますが、バックグラウンドではSnowflakeは VARCHAR を使用します。CHAR に関連する変換情報 は、 NCHAR でも有効です。
NCHAR [ (size) ]
サンプルソースパターン¶
テーブル作成時のNcharデータ型¶
Oracle¶
CREATE TABLE nchar_data_types
(
nchar_column1 NCHAR,
nchar_column2 NCHAR(5)
);
INSERT INTO nchar_data_types VALUES ('ភ', 'ភាសាខ');
Snowflake¶
CREATE OR REPLACE TABLE nchar_data_types
(
nchar_column1 NCHAR,
nchar_column2 NCHAR(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO nchar_data_types
VALUES ('ភ', 'ភាសាខ');
注釈
Oracleでは、これらの値を同じサイズの CHAR 列に挿入しようとすると、 value too large for column というエラーがトリガーされます。
Nchar列からの情報の取得¶
Oracle¶
SELECT * FROM nchar_data_types;
結果¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
Snowflake¶
SELECT * FROM
nchar_data_types;
結果¶
NCHAR_COLUMN1 |
NCHAR_COLUMN2 |
|---|---|
ភ |
ភាសាខ |
各列のサイズをバイト単位で取得する¶
Oracle¶
SELECT
LENGTHB(nchar_column1),
LENGTHB(nchar_column2)
FROM nchar_data_types;
結果¶
LENGTHB(NCHAR_COLUMN1) |
LENGTHB(NCHAR_COLUMN2) |
|---|
2| 10|
Snowflake¶
SELECT
OCTET_LENGTH(nchar_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(nchar_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
nchar_data_types;
結果¶
OCTET_LENGTH(NCHAR_COLUMN1) |
OCTET_LENGTH(NCHAR_COLUMN2) |
|---|
3| 15|
列宣言で指定された数値はバイト単位ではなく文字単位のサイズであることに注意してください。そのため、これらの特殊文字を格納するために、より多くのスペースが使用されることがわかります。
注釈
Snowflakeでは、 VARCHAR は UTF-8を使用します。サイズは、1、2、3、または4バイトで表現できるUnicode文字によって異なります。この場合、カンボジア文字は3バイトで格納されます。
注意
このようなわずかな違いもありますが、データの統合は保たれています。
既知の問題¶
1.一部の組み込み関数から得られる結果は異なる場合があります
前のセクションで説明したように、列に対して組み込み関数を使用すると、異なる結果を取得する場合があります。例えば、列の長さを取得します。
関連 EWIs¶
SSC-FDM-OR0015: LENGTHB が OCTET_LENGTH に変換されました。
NVARCHAR2 データ型¶
説明¶
NVARCHAR2データ型は、国文字セットの可変長の文字列を指定します。(Oracle SQL 言語リファレンス NVARCHAR2)
NVARCHAR2 (size)
NVARCHAR2 では、Unicodeで特殊文字を保存して、どのような使用状況でも保持することができますが、これらの特殊文字を保存するには、より多くのビットが必要になる場合があります。そのため、デフォルトでは、 NVARCHAR2 文字セットは AL16UTF16 であり、これは通常 AL32UTF8 である VARCHAR2 の共通文字データセットとは対照的です。
Snowflake VARCHARに変換されたNVARCHAR、 VARCHAR2に関係する変換情報 もNVARCHAR2に対して有効です。
NVARCHAR2 (size)
サンプルソースパターン¶
テーブル作成時のNvarchar2データ型¶
Oracle¶
CREATE TABLE nvarchar2_data_types
(
nvarchar2_column NVARCHAR2 (5)
);
INSERT INTO nvarchar2_data_types VALUES ('ភាសាខ');
Snowflake¶
CREATE OR REPLACE TABLE nvarchar2_data_types
(
nvarchar2_column VARCHAR(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO nvarchar2_data_types
VALUES ('ភាសាខ');
注釈
Oracleでは、これらの値を同じサイズの VARCHAR2 列に挿入しようとすると、 value too large for column というエラーがトリガーされます。
Nchar列からの情報の取得¶
Oracle¶
SELECT * FROM nvarchar2_data_types;
結果¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
Snowflake¶
SELECT * FROM
nvarchar2_data_types;
結果¶
NVARCHAR2_COLUMN |
|---|
ភាសាខ |
各列のサイズをバイト単位で取得する¶
Oracle¶
SELECT
LENGTHB(nvarchar2_column)
FROM nvarchar2_data_types;
結果¶
LENGTHB(NVARCHAR2_COLUMN) |
|---|
10 |
Snowflake¶
SELECT
OCTET_LENGTH(nvarchar2_column) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
nvarchar2_data_types;
結果¶
OCTET_LENGTH(NVARCHAR2_COLUMN) |
|---|
15 |
列宣言で指定された数値はバイト単位ではなく文字単位のサイズであることに注意してください。そのため、これらの特殊文字を格納するために、より多くのスペースが使用されることがわかります。
注釈
Snowflakeでは、 VARCHAR は UTF-8を使用します。サイズは、1、2、3、または4バイトで表現できるUnicode文字によって異なります。この場合、カンボジア文字は3バイトで格納されます。
注意
このようなわずかな違いもありますが、データの統合は保たれています。
既知の問題¶
1.一部の組み込み関数から得られる結果は異なる場合があります
前のセクションで説明したように、列に対して組み込み関数を使用すると、異なる結果を取得する場合があります。例えば、列の長さを取得します。
関連 EWIs¶
SSC-FDM-OR0015: LENGTHB が OCTET_LENGTH に変換されました。
VARCHAR データ型¶
説明¶
Oracleでは、ドキュメントで説明されているように、 VARCHAR の代わりに VARCHAR2 を使用することを推奨しています。
しかし、構文は ANSI、DB2、SQL/DSデータ型 を使って解析および変換されます。
VARCHAR2 データ型¶
説明¶
VARCHAR2データ型は、データベース文字セットの 可変 長の文字列を指定します。(Oracle SQL 言語リファレンス VARCHAR2)
Oracleのドキュメントで示されているように、 VARCHAR2 データ型のサイズは長さの制約であり、容量と混同しないでください。VARCHAR2 に格納できる文字の合計は、データベースの文字セットや構成によって異なりますが、一般的に許容される最大サイズは4000です。
VARCHAR2 は、デフォルトでより大きなバイト数/文字数を格納できるSnowflake VARCHAR に翻訳されます。いずれにせよ、使用されるメモリはOracleと同じように列に格納された値のサイズを使って変数化されます。
VARCHAR2 (size [ BYTE | CHAR ])
サンプルソースパターン¶
テーブル作成時のVarchar2データ型¶
Oracle¶
CREATE TABLE varchar2_data_types
(
varchar2_column1 VARCHAR2(5),
varchar2_column2 VARCHAR2(5 BYTE),
varchar2_column3 VARCHAR2(5 CHAR)
);
INSERT INTO varchar2_data_types VALUES ('H', 'Hello', 'Hell');
Snowflake¶
CREATE OR REPLACE TABLE varchar2_data_types
(
varchar2_column1 VARCHAR(5),
varchar2_column2 VARCHAR(5),
varchar2_column3 VARCHAR(5)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO varchar2_data_types
VALUES ('H', 'Hello', 'Hell');
varchar列からのデータの取得¶
Oracle¶
SELECT * FROM varchar2_data_types;
結果¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Hello |
Hell |
Snowflake¶
SELECT * FROM
varchar2_data_types;
結果¶
VARCHAR2_COLUMN1 |
VARCHAR2_COLUMN2 |
VARCHAR2_COLUMN3 |
|---|---|---|
H |
Hello |
Hell |
列の変数サイズの見直し¶
Oracle¶
SELECT
LENGTHB(varchar2_column1),
LENGTHB(varchar2_column2),
LENGTHB(varchar2_column3)
FROM VARCHAR2_DATA_TYPES;
結果¶
LENGTHB(VARCHAR2_COLUMN1) |
LENGTHB(VARCHAR2_COLUMN2) |
LENGTHB(VARCHAR2_COLUMN3) |
|---|---|---|
1 |
5 |
4 |
Snowflake¶
SELECT
OCTET_LENGTH(varchar2_column1) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(varchar2_column2) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/,
OCTET_LENGTH(varchar2_column3) /*** SSC-FDM-OR0015 - LENGTHB TRANSFORMED TO OCTET_LENGTH RESULTS MAY VARY DUE TO MEMORY MANAGEMENT OF DBMS ***/
FROM
VARCHAR2_DATA_TYPES;
結果¶
OCTET_LENGTH(VARCHAR2_COLUMN1) |
OCTET_LENGTH(VARCHAR2_COLUMN2) |
OCTET_LENGTH(VARCHAR2_COLUMN3) |
|---|---|---|
1 |
5 |
4 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-FDM-OR0015: LENGTHB が OCTET_LENGTH に変換されました。
LOB データ型¶
説明¶
組み込みのLOBデータ型
BLOB、CLOB、NCLOB(内部的に格納)およびBFILE(外部的に格納)は、テキスト、画像、ビデオ、空間データなどの大規模な非構造化データを格納できます。(Oracle SQL Language Reference LOB Data Type)
BFILE
BLOB
CLOB
NCLOB
警告
LOBデータ型はSnowflakeでは サポートされていません 。Snowflakeのドキュメント によると、 CLOB を VARCHAR に、 BLOB を BINARY に変換することが推奨されていますが、いくつかの制限があります。 {% endhint %}
警告
テーブルのLOBプロパティも、Snowflakeでは サポートされていません 。 {% endhint %}
BFILE データ型
Description
データベースの外部に保存されている大容量バイナリファイルへのロケーターを含みます。データベースサーバー上の外部 LOBs へのバイトストリームI/Oアクセスを有効にします。
BFILE列または属性には、BFILEロケーターが格納されます。このロケーターは、サーバーのファイルシステム上のバイナリファイルへのポインターとして機能します。ロケーターはディレクトリ名とファイル名を保持します。(Oracle SQL 言語リファレンス BFILE データ型)。
警告
BFILE データ型は、Snowflakeでは サポートされていません。VARCHAR が代わりに使用されます。
サンプルソースパターン¶
テーブル作成時のBfileデータ型¶
警告
Oracle BFILE 列は、ディレクトリとファイル名を持つロケーターを格納するために使用されます。ディレクトリとファイル名を列に格納するため、Snowflake VARCHAR に変更されます。ただし、ファイルの内容の読み込みは手動で行う必要があります。
Oracle¶
--Create Table
CREATE TABLE bfile_table
(
col1 BFILE
);
--Insert Bfilename
INSERT INTO bfile_table VALUES (
BFILENAME('mydirectory', 'myfile.png')
);
--Select
SELECT * FROM bfile_table;
結果¶
COL1 |
|---|
[BFILE:myfile.png] |
Snowflake¶
--Create Table
CREATE OR REPLACE TABLE bfile_table
(
col1
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0105 - ADDITIONAL WORK IS NEEDED FOR BFILE COLUMN USAGE. BUILD_STAGE_FILE_URL FUNCTION IS A RECOMMENDED WORKAROUND ***/!!!
VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
--Insert Bfilename
INSERT INTO bfile_table
VALUES (PUBLIC.BFILENAME_UDF('mydirectory', 'myfile.png')
);
--Select
SELECT * FROM
bfile_table;
結果¶
COL1 |
|---|
mydirectory\myfile.png |
警告
BFILENAME() を置き換えるために UDF が追加されました。
UDF が追加されました
CREATE OR REPLACE FUNCTION PUBLIC.BFILENAME_UDF (DIRECTORYNAME STRING, FILENAME STRING)
RETURNS STRING
LANGUAGE SQL
IMMUTABLE
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"udf"}}'
AS
$$
DIRECTORYNAME || '\\' || FILENAME
$$;
既知の問題¶
1.DBMS_LOB 組み込みパッケージにアクセスできません¶
Snowflakeでは LOB データ型がサポートされていないため、 DBMS_LOB 関数に相当するものはなく、回避策もまだ実装されていません。
関連 EWIs¶
SSC-EWI-OR0105:BFILE列の使用には追加作業が必要です。 BUILD_STAGE_URL 関数は推奨される回避策です。
BLOB データ型¶
説明¶
BLOBデータ型は構造化されていないバイナリ大容量オブジェクトを格納します。BLOBオブジェクトは文字セットセマンティクスのないビットストリームと考えることができます。(Oracle SQL 言語リファレンス BLOB データ型)。
警告
BLOB データ型は、Snowflakeでは サポートされていません。BINARY が代わりに使用されます。
サンプルソースパターン¶
テーブル作成時の BLOB¶
Oracle¶
CREATE TABLE blobtable( blob_column BLOB, empty_column BLOB );
INSERT INTO blobtable VALUES (NULL, EMPTY_BLOB());
Snowflake¶
CREATE OR REPLACE TABLE blobtable ( blob_column BINARY,
empty_column BINARY
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO blobtable
VALUES (NULL, TO_BINARY(' '));
データの取得¶
Oracle¶
SELECT * FROM blobtable;
結果¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
[NULL] |
[BLOB] |
Snowflake¶
SELECT * FROM
blobtable;
結果¶
BLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
NULL |
関数例¶
警告
この例は、Oracle BLOB とSnowflake BINARY の機能的同等性を示すために使用されているだけであり、SnowConvert AIの変換 ではありません 。
警告
"utl_raw.cast_to_raw"と"DBMS_LOB.SUBSTR"関数を使用しています。これらの関数の変換は、現在 SnowConvert では サポートされていません。
Oracle¶
INSERT INTO blobtable VALUES(
utl_raw.cast_to_raw('hello world'), EMPTY_BLOB());
SELECT DBMS_LOB.SUBSTR(blob_column) AS result
FROM blobtable;
結果¶
RESULT |
|---|
[NULL] |
hello world |
Snowflake¶
INSERT INTO blobtable
VALUES(
!!!RESOLVE EWI!!! /*** SSC-EWI-OR0076 - TRANSLATION FOR BUILT-IN PACKAGE 'utl_raw.cast_to_raw' IS NOT CURRENTLY SUPPORTED. ***/!!!
'' AS cast_to_raw, TO_BINARY(' '));
SELECT
SUBSTR(blob_column, 1) AS result
FROM
blobtable;
結果¶
RESULT |
|---|
[NULL] |
hello world |
既知の問題¶
1.最大長 BLOB (Oracle)と BINARY (Snowflake)の違い¶
Oracle BLOB 列の最大サイズは (4ギガバイト - 1) * (データベースブロックサイズ) ですが、 Snowflake BINARY は 8MB に制限されています。
2.EMPTY_BLOB の空の値¶
EMPTY_BLOB() を使用して列を初期化すると、空の LOB ロケーターが返されます。一方、翻訳後の列は文字列' 'を返します。
3.DBMS_LOB 組み込みパッケージにアクセスできません¶
Snowflakeでは LOB データ型がサポートされていないため、 DBMS_LOB 関数に相当するものはなく、回避策もまだ実装されていません。
関連 EWIs¶
SSC-EWI-OR0076:組み込みパッケージはサポート対象外です。
CLOB データ型¶
説明¶
シングルバイト文字またはマルチバイト文字を含む文字大容量オブジェクト。固定幅文字セットと可変幅文字セットの両方がサポートされており、どちらもデータベースの文字セットを使用します。(Oracle SQL 言語リファレンス CLOB データ型)。
警告
CLOB データ型は、Snowflakeでは サポートされていません。VARCHAR が代わりに使用されます。
サンプルソースパターン¶
テーブル作成時の CLOB¶
Oracle¶
CREATE TABLE clobtable ( clob_column CLOB, empty_column CLOB );
INSERT INTO clobtable VALUES ( 'THIS IS A TEST', EMPTY_CLOB() );
Snowflake¶
CREATE OR REPLACE TABLE clobtable ( clob_column VARCHAR,
empty_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO clobtable
VALUES ( 'THIS IS A TEST', TO_VARCHAR(' - '));
データの取得¶
Oracle¶
SELECT * FROM clobtable;
結果¶
CLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
SELECT * FROM
clobtable;
結果¶
CLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
- |
既知の問題¶
1.最大長 CLOB (Oracle)と VARCHAR (Snowflake)の違い¶
Oracle CLOB 列の最大サイズは (4ギガバイト - 1) * (データベースブロックサイズ) ですが、 Snowflake VARCHAR は 16MB に制限されています。
2.EMPTY_CLOB の空の値¶
EMPTY_CLOB() を使用して列を初期化すると、空の LOB ロケーターが返されます。一方Snowflakeでは、翻訳後の列は文字列' - 'を返します。
3.DBMS_LOB 組み込みパッケージにアクセスできません¶
Snowflakeでは LOB データ型がサポートされていないため、 DBMS_LOB 関数に相当するものはなく、回避策もまだ実装されていません。
関連 EWIs¶
関連 EWIs はありません。
NCLOB データ型¶
説明¶
Unicode文字を含む文字大容量オブジェクト。固定幅文字セットと可変幅文字セットの両方がサポートされており、どちらもデータベースの国文字セットを使用します。(Oracle SQL 言語リファレンス NCLOB データ型)。
警告
NCLOB データ型は、Snowflakeでは サポートされていません。VARCHAR が代わりに使用されます。
サンプルソースパターン¶
テーブル作成時の NCLOB¶
Oracle¶
CREATE TABLE nclobtable ( nclob_column NCLOB, empty_column NCLOB );
INSERT INTO nclobtable VALUES ( 'THIS IS A TEST', EMPTY_CLOB() );
Snowflake¶
CREATE OR REPLACE TABLE nclobtable ( nclob_column VARCHAR,
empty_column VARCHAR
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
INSERT INTO nclobtable
VALUES ( 'THIS IS A TEST', TO_VARCHAR(' - '));
データの取得¶
Oracle¶
SELECT * FROM nclobtable;
結果¶
NCLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
Snowflake¶
SELECT * FROM
nclobtable;
結果¶
NCLOB_COLUMN |
EMPTY_COLUMN |
|---|---|
THIS IS A TEST |
- |
既知の問題¶
1.最大長 CLOB (Oracle)と VARCHAR (Snowflake)の違い¶
Oracle NCLOB 列の最大サイズは (4ギガバイト - 1) * (データベースブロックサイズ) ですが、 Snowflake VARCHAR は 16MB に制限されています。
2.EMPTY_CLOB の空の値¶
EMPTY_CLOB() を使用して列を初期化すると、空の LOB ロケーターが返されます。一方、翻訳後の列は文字列' - 'を返します。
3.DBMS_LOB 組み込みパッケージにアクセスできません¶
Snowflakeでは LOB データ型がサポートされていないため、 DBMS_LOB 関数に相当するものはなく、回避策もまだ実装されていません。
関連 EWIs¶
関連 EWIs はありません。