SnowConvert AI - Oracle - Oracle組み込みデータ型

拡張データ型

説明

Oracle Database 12_c_ 以降、 VARCHAR2NVARCHAR2RAW データ型に最大サイズ32767バイトを指定できます。データベースがこの新しい最大サイズをサポートするかどうかは、初期化パラメーター MAX_STRING_SIZE をセットすることで制御できます。

宣言されたサイズが4000バイトを超える VARCHAR2 または NVARCHAR2 データ型、または宣言されたサイズが2000バイトを超える RAW データ型は、 拡張 データ です。(Oracle SQL 言語リファレンス拡張データ型)。

Oracleでは、データベースの最大文字列サイズを STANDARD から EXTENDED に増やすことができますが、Snowflakeにはこの機能に 相当するものがありません

したがって、 VARCHAR2NVARCHAR2RAW 拡張データ型はSnowflakeではサポートされておらず、通常の VARCHAR2NVARCHAR2RAW データ型と同様に変換されます。詳しくは 文字データ型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
Copy

サンプルソースパターン

テーブル作成の列としての 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;
Copy
結果

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

警告

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

  1. SSC-EWI-0073:機能的同等性レビューを保留中

LONG データ型

LONG 列は、最大2ギガバイト-1、または231-1バイトを含む可変長の文字列を格納します。LONG 列は、 VARCHAR2 列の多くの特徴を持っています。長い文字列を格納するために、 LONG 列を使用することができます。LONG 値の長さは、コンピュータの利用可能なメモリによって制限される場合があります。(Oracle SQL 言語リファレンスLongデータ型)

LONG
Copy

サンプルソースパターン

テーブル作成時のLong

Oracle
CREATE TABLE long_table
( 
     id 	  NUMBER,
     long_column  LONG
);
     
 INSERT INTO long_table VALUES (1, 'this is a text');
Copy
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');
Copy

Long列からのデータ取得

Oracle
SELECT long_column FROM long_table;
Copy
結果

LONG_COLUMN

これはテキストです

Snowflake
SELECT long_column FROM
long_table;
Copy
結果

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

警告

ターゲットテーブル列のデータ型が CLOB と異なる場合、Oracleはデータを挿入しようとするとnull値を挿入したり、エラーを表示したりすることがあります。

関連 EWIs

  1. SSC-FDM-0006:数値型の列はSnowflakeでは同様の動作をしない場合があります。

RAWとLONG RAWデータ型

説明

RAWLONG RAW データ型は、異なるシステム間でデータを移動する際にOracleデータベースが明示的に変換しないデータを格納します。これらのデータ型はバイナリデータまたはバイト文字列を対象としています。(Oracle SQL 言語参照Rowデータ型およびLong Rawデータ型)

{ LONG RAW | RAW (size) }
Copy

サンプルソースパターン

テーブル作成時の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')
Copy
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');
Copy

RawおよびLong Raw列からのデータ取得

Oracle
SELECT * FROM raw_table ORDER BY id;
Copy
結果

ID

RAW_COLUMN

LONG_RAW_COLUMN

1

ªº««««© 2 B7 :ºººº«ºª»¬ßý

2

ªªªªª

«««««««««««««««««««ªººªºººººººººº

3

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª

Snowflake
SELECT * FROM
raw_table
ORDER BY id;
Copy
結果

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

FLOAT

精度のない FLOAT データ型に関しては、OracleとSnowflakeで違いはありません。

Oracle
SELECT col1 FROM float_data_type_table;
Copy
結果

col1

100.55555

1.9

Snowflake
SELECT col1 FROM
float_data_type_table;
Copy
結果

col1

100.55555

1.9

FLOAT ( p )

FLOAT データ型に精度 (p) が指定されている場合、クエリ結果が等価にならないことがあります。若干の四捨五入の違いがあります。

Oracle
SELECT col2 FROM float_data_type_table;

SELECT col3 FROM float_data_type_table;
Copy
結果

col2

1.2

7.9

13

120

col3

----------------------------------------------------------------------------------------------------

1111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000

Snowflake
SELECT col2 FROM
float_data_type_table;

SELECT col3 FROM
float_data_type_table;
Copy
結果

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

NUMBER (デフォルトケース)

精度とスケールが指定されていない場合、デフォルト値は利用可能な最大値 NUMBER(38, 127) となります。デフォルトケースの現在の変換は NUMBER(38,19) です。

警告

Oracleでは、精度もスケールも定義しないと、デフォルトで「未定義の精度とスケール」になります。入力を「受信したとおりに」保存することで動作します。つまり、整数と浮動小数点数の両方を処理できます。ここでは、 38, 18 を使って、整数に20を使い、浮動小数点数に18を残すことで、その両方をカバーしようとしています。

Oracle
SELECT col1 FROM number_data_type_table;
Copy
結果

col1

100

Snowflake
SELECT col1 FROM
number_data_type_table;
Copy
結果

col1

100.0000000000000000000

NUMBER ( p )

この場合、精度は小数点の左側の数値の桁数を指定します。

Oracle
SELECT col2 FROM number_data_type_table;
Copy
結果

col2

2

Snowflake
SELECT col2 FROM
number_data_type_table;
Copy
結果

col2

2

NUMBER ( p, s ) p > s

sp よりも低い場合、精度はその数値が持ちうる桁数を指定します。スケールは小数点の右側の有効桁数を指定しますので、小数点の左側の桁数は指定されたスケールに依存します。

Oracle
SELECT col3 FROM number_data_type_table;
Copy
結果

col3

12345.12345

Snowflake
SELECT col3 FROM
number_data_type_table;
Copy
結果

col3

12345.12345

NUMBER ( p, -s )

負のスケールは、小数点の左側の有効桁数で、最下位桁を含みません。負のスケールの場合、実際のデータは小数点の左側の指定された桁数に丸められるため、最下位桁は小数点の左側になります。現在の変換は、負のスケールを削除することです。

Oracle
SELECT col4 FROM number_data_type_table;
Copy
結果

col4

16400

17600

Snowflake
SELECT col4 FROM
number_data_type_table;
Copy
結果

col4

16431

17551

NUMBER ( p, s ) s > p

スケールが精度を上回る場合は、以下の点を考慮してください。

  • 挿入される数値は、小数点の左側に有効桁数がない可能性があります。使用可能なのは0のみです。

  • 小数点の右側の1桁目は0でなければなりません。

  • 精度は小数点の右側の最大有効桁数を指定します。

Oracle
SELECT col5 FROM number_data_type_table;
Copy
結果

col5

0.00009

0.00002

0.01268

Snowflake
SELECT col5 FROM
number_data_type_table;
Copy
結果

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

関連 EWIs

  1. SSC-EWI-OR0092 数値データ型の負のスケールが出力から削除されました。

  2. SSC-FDM-0006:数値型の列はSnowflakeでは同様の動作をしない場合があります。

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

注釈

「NaN」 は _ Not a Number _ を意味します。この値はOracleでは BINARY_DOUBLE データ型によって、Snowflakeでは FLOAT データ型によって許可されています。

BINARY_DOUBLE -> FLOAT

BINARY_DOUBLE データ型はSnowflakeではサポートされていないため、 FLOAT に変換されます。

Oracle
SELECT * FROM binary_double_data_type_table;
Copy
結果

col1

0

179769313486231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

NaN

Snowflake
SELECT * FROM
binary_double_data_type_table;
Copy
結果

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

注釈

「NaN」 は _ Not a Number _ を意味します。この値はOracleでは BINARY_FLOAT データ型によって、Snowflakeでは FLOAT データ型によって許可されています。

BINARY_FLOAT -> FLOAT

BINARY_FLOAT データ型はSnowflakeではサポートされていないため、 FLOAT に変換されます。

Oracle
SELECT * FROM binary_float_data_type_table;
Copy
結果

col1

0

340282001837565600000000000000000000000

NaN

Snowflake
SELECT * FROM binary_float_data_type_table;
Copy
結果

col1

0

340282000000000000000000000000000000000

NaN

既知の問題

1.BINARY_FLOAT データ型はSnowflakeではサポートされていません

BINARY_FLOAT データ型はSnowflakeではサポートされていないため、 FLOAT に変換されます。

関連 EWIs

関連 EWIs はありません。

日時および間隔データ型

日時データ型は、 DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE です。日時データ型の値はdatetime値と呼ばれることもあります。間隔データ型は INTERVAL YEAR TO MONTH および INTERVAL DAY TO SECOND です。間隔データ型の値は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 は日付と時刻の情報を保存することに留意してください。情報を失わないようにするには、 DATETIMESTAMP に変換する必要があります。

注釈

重要な四捨五入の動作の違い:date/timestamp データ型と秒を含む期間との間の操作を実行する場合、Oracle は秒を丸めず、指定された精度を保持しますが、Snowflake は秒を最も近い整数秒に丸めます。この四捨五入の動作の違いが、異なる結果につながることがあります。

サンプルソースパターン

テーブル作成時の日付

Oracle
CREATE TABLE date_table
(
	date_col date
);

INSERT INTO date_table(date_col) VALUES (DATE '2010-10-10');
Copy
--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');
Copy
--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');
Copy

日付列からのデータの取得

Oracle
SELECT date_col FROM date_table;
Copy
結果

DATE_COL

2010-10-10 00:00:00.000

Snowflake
SELECT date_col FROM
date_table;
Copy
結果

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

関連 EWIs

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

サンプルソースパターン

テーブル作成時の日~秒の間隔

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

間隔値は、サポートされている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;
Copy
結果

INTERVAL_DAY_COL1

INTERVAL_DAY_COL2

1 2:3:4.567

1 2:3:4.567

Snowflake
SELECT * FROM
interval_day_to_second_table;
Copy
結果

INTERVAL_DAY_COL1

INTERVAL_DAY_COL2

1日、2時間、3分、4秒、56ミリ秒

1日、2時間、3分、4秒、56ミリ秒

既知の問題

1.算術演算のみがサポートされています

Snowflake間隔にはいくつかの制限があります。DATE または TIMESTAMP間隔定数 間の算術演算のみがサポートされており、その他のシナリオはサポートされていません。

関連 EWIs

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

サンプルソースパターン

テーブル作成時の年~月の間隔

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

間隔値は、サポートされているSnowflake形式に変換され、列の中にテキストとして挿入されます。Snowflakeは 間隔 をデータ型としてサポートしていないため、算術演算でのみサポートされます。この値を使用するには、(可能であれば) 間隔定数 として取り出して使用する必要があります。

オリジナルのOracle値: INTERVAL '1-2' YEAR TO MONTH

Snowflake列に格納された値: '1y, 2m'

Snowflake間隔定数としての値: INTERVAL '1y, 2m'

年~月の間隔列からのデータの取得

Oracle
SELECT * FROM interval_year_to_month_table;
Copy
結果

INTERVAL_YEAR_COL1

INTERVAL_YEAR_COL2

1-2

1000-11

Snowflake
SELECT * FROM
interval_year_to_month_table;
Copy
結果

INTERVAL_YEAR_COL1

INTERVAL_YEAR_COL2

1y, 2m

              |1000y, 11m        |
Copy

既知の問題

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

サンプルソースパターン

テーブル作成時のタイムスタンプ

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

タイムスタンプ列からのデータの取得

Oracle
SELECT * FROM timestamp_table;
Copy
結果

TIMESTAMP_COL1

TIMESTAMP_COL2

2010-10-10 12:00:00.000

2010-10-10 12:00:00.000

Snowflake
SELECT * FROM
timestamp_table;
Copy
結果

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

Copy

サンプルソースパターン

テーブル作成時のタイムゾーン付きタイムスタンプ

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

ローカルタイムゾーン付きタイムスタンプ列からのデータの取得

Oracle
SELECT * FROM timestamp_with_local_time_zone_table;
Copy
結果

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

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

既知の問題

1.デフォルトのデータベースのタイムゾーン

この種類のデータ型での操作はデータベースのタイムゾーンの影響を受け、結果が異なる場合があります。デフォルトのタイムゾーンは以下のクエリで確認できます。

Oracle
SELECT dbtimezone FROM dual;
Copy
Snowflake
SELECT dbtimezone FROM dual;
Copy
2.ローカルタイムゾーン動作のOracleタイムスタンプ

ローカルタイムゾーンデータ型でタイムスタンプを操作する場合、Oracleはタイムスタンプをデータベースのデフォルトのタイムゾーンに変換します。Snowflakeでこの動作をエミュレートするには、 TIMESTAMP_TYPE_MAPPING セッションパラメーターを「TIMESTAMP_LTZ」に設定します。

ALTER SESSION SET TIMESTAMP_TYPE_MAPPING = 'TIMESTAMP_LTZ';
Copy
3.タイムスタンプの形式は異なる場合があります

Snow Convertは日付/タイムスタンプ形式文字列の変換を行わないため、コードのデプロイ時にエラーが発生する可能性があります。例:

Oracle
INSERT INTO timestamp_with_local_time_zone_table (timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy
Snowflake
INSERT INTO timestamp_with_local_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy

警告

デフォルトのタイムスタンプ入力形式では、「-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

Copy

サンプルソースパターン

テーブル作成時のタイムゾーン付きタイムスタンプ

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

タイムゾーン付きタイムスタンプ列からのデータの取得

Oracle
SELECT * FROM timestamp_with_time_zone_table;
Copy
結果

TIMESTAMP_COL1

2010-10-10 12:00:00.000 -0600

Snowflake
SELECT * FROM
timestamp_with_time_zone_table;
Copy
結果

TIMESTAMP_COL1

2010-10-10 12:00:00.000 -0700

注釈

タイムゾーンが指定されていない場合、データベースのデフォルトのタイムゾーンが追加されるため、両方のエンジンでタイムゾーンが異なることに注意してください。

データベースのデフォルトのタイムゾーンを変更するには、以下の構文を使用します。

ALTER account SET sqtimezone = timezone_string;
Copy

既知の問題

1.タイムスタンプの形式は異なる場合があります

Snow Convertは日付/タイムスタンプ形式文字列の変換を行わないため、コードのデプロイ時にエラーが発生する可能性があります。例:

Oracle
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy
Snowflake
INSERT INTO timestamp_with_time_zone_table(timestamp_col1) VALUES (TIMESTAMP '2010-10-10 12:00:00 -8:00');
Copy

警告

デフォルトのタイムスタンプ入力形式では、「-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'));
Copy
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'));
Copy

加算

組み合わせマトリックス

これは、日付、タイムスタンプ、数値、および未知の型とのさまざまな組み合わせに対して、マイグレーターがどのように加算操作を解決するかの要約です。

加算

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

SSC-EWI-OR0036

Number + Float

間隔

Date+間隔(IntervalUnit)

タイムスタンプ+間隔(IntervalUnit)

INVALID

SSC-EWI-OR0036

不明+間隔(IntervalUnit)

INVALID

不明

DATEADD_UDF

DATEADD_UDF

不明+ Number

不明+間隔(IntervalUnit)

SSC-EWI-OR0036

SSC-EWI-OR0036

Float

DATEADD_UDF

DATEADD_UDF

Float + Number

INVALID

SSC-EWI-OR0036

Float + Float

注釈

不明型の列は、マイグレーターがその列が含むデータ型を確立できなかった結果です。例えば、操作対象のテーブルのDDLs、ビューへの操作の結果の列、CTES、またはサブクエリなどがない場合です。

警告

デフォルトで、Snow ConvertはDate/Timestamp + Interval型の操作をネイティブのSnowflakeの操作に移行しますが、場合によっては代わりに UDF を使用すると便利なことがあります。このUDFについての詳細は こちら をご参照ください。

マイグレーターが加算操作を解決するために使用できるさまざまなパスについて、以下に説明します。

無効

Oracleで加算操作を行う場合、特定の組み合わせは無効です。

Oracle
SELECT AsDate + AsDateTwo From TIMES;

SELECT AsDate + AsTimeStamp From TIMES;
Copy
結果
SQL Error [975] [42000]: ORA-00975: date + date not allowed

SQL Error [30087] [99999]: ORA-30087: Adding two datetime values is not allowed

Copy

Date+間隔(日)

これは、日付型と数値(およびその逆)の加算操作のための現在の変換です。例

Oracle
SELECT AsDate + 1 FROM TIMES;

SELECT 1 + AsDate FROM TIMES;
Copy
結果

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

ASDATE + INTERVAL '1 DAY'

2021-11-07

タイムスタンプ+間隔(日)

これは、タイムスタンプ型と数値(およびその逆)の加算操作のための現在の変換です。例

Oracle
SELECT AsTimestamp + 1 FROM TIMES;

SELECT 1 + AsTimestamp FROM TIMES;
Copy
結果

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

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

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

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

SSC-EWI-OR0036

Number - Float

間隔

INVALID

INVALID

INVALID

SSC-EWI-OR0036

不明-間隔(IntervalUnit)

NOT SUPPORTED IN ORACLE

不明

DATEDIFF_UDF

DATEDIFF_UDF

SSC-EWI-OR0036

不明-間隔(IntervalUnit)

SSC-EWI-OR0036

SSC-EWI-OR0036

Float

DATEDIFF_UDF

DATEDIFF_UDF

Float - Number

NOT SUPPORTED IN ORACLE

SSC-EWI-OR0036

Float - Float

注釈

不明型の列は、マイグレーターがその列が含むデータ型を確立できなかった結果です。例えば、操作対象のテーブルのDDLs、ビューへの操作の結果の列、CTES、またはサブクエリなどがない場合です。

警告

デフォルトで、Snow ConvertはDate/Timestamp + Interval型の操作をネイティブのSnowflakeの操作に移行しますが、場合によっては代わりに UDF を使用すると便利なことがあります。このUDFについての詳細は こちら をご参照ください。

マイグレーターが減算操作を解決するために使用できるさまざまなパスについて、以下に説明します。

無効

Oracleで減算操作を行う場合、特定の組み合わせは無効です。

Oracle
SELECT 1 - AsDate FROM TIMES;

SELECT 1 - AsTimestamp FROM TIMES;
Copy
結果
SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got DATE

SQL Error [932] [42000]: ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP

Copy

DATEDIFF

日付型の2つのオペランド間の減算は、時間単位(最初のパラメーター)として'day'を使用して、Snowflake DATEDIFF関数に変換されます。例

Oracle
SELECT AsDate - AsDateTwo FROM TIMES;
Copy
結果

ASDATE-ASDATETWO

1

Snowflake
SELECT AsDate - AsDateTwo FROM
TIMES;
Copy
結果

DATEDIFF(DAY, ASDATETWO, ASDATE)

1

Date -間隔(日)

これは、日付型と数値の間の減算操作に対する現在の変換です。例

Oracle
SELECT AsDate - 1 FROM TIMES;

SELECT AsDate + -1 FROM TIMES;
Copy
結果

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

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

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

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

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

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

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

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;
Copy
Snowflake
SELECT AsDate - (EXTRACT(DAY FROM ASDATE)) FROM
TIMES;
Copy

このEWIは、列の型が解決できなかった操作で追加されます。列のタイプがINTERVALで、他の間隔型とのみ操作される場合、EWIが追加されますが、コードはコメントアウトされません。次の例では、この動作を説明します。

Oracle
SELECT INTERVAL '1' DAY + interval_column FROM UNKNOWN_TABLE;
Copy
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;
Copy

既知の問題

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

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

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

  1. SSC-EWI-0108:以下のサブクエリは、無効とみなされるパターンの少なくとも1つに一致し、コンパイルエラーが発生する可能性があります。

  2. SSC-EWI-OR0036:型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。

間隔 UDFs とSnowflakeネイティブの間隔操作

説明

以下の表は、間隔の演算に関する DATEADD_UDF INTERVAL and DATEDIFF_UDF INTERVALSnowflakeネイティブ操作 の比較を示しています。

必要なコード

比較テーブルのクエリを実行するには、以下のコードを実行する必要があります。

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

比較テーブル

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

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

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

結果

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

  1. 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 の各サブタイプにも適用されます。

  • NATURAL

  • NATURALN

  • POSITIVE

  • POSITIVEN

  • SIGNTYPE

  • SIMPLE_INTEGER

警告

これらのサブタイプのいくつかは、現在SnowConvert AIで認識されていないため、 VARIANT に変換され、ユーザー定義タイプとみなされます。この問題を解決するための作業項目はすでにあります。

サンプルソースパターン

以下のテーブルとその挿入例をご覧ください。

コード

CREATE TABLE PLS_INTEGER_TABLE(
	COL NUMBER
);
Copy

プロシージャブロックでの 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;
Copy
結果

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

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

サンプルソースパターン

テーブル作成時の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');
Copy
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');
Copy

char列からのデータの取得

Oracle
SELECT * FROM char_data_types;
Copy
結果

CHAR_COLUMN1

CHAR_COLUMN2

CHAR_COLUMN3

CHAR_COLUMN4

H

Hello world

Hello world

Hello world

Snowflake
SELECT * FROM
char_data_types;
Copy
結果

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

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

OCTET_LENGTH(CHAR_COLUMN1)

OCTET_LENGTH(CHAR_COLUMN2)

OCTET_LENGTH(CHAR_COLUMN3)

OCTET_LENGTH(CHAR_COLUMN4)

1

11

11

11

注意

このようなわずかな違いもありますが、データの統合は保たれています。

既知の問題

1.一部の組み込み関数から得られる結果は異なる場合があります

前のセクションで説明したように、列に対して組み込み関数を使用すると、異なる結果を取得する場合があります。例えば、列の長さを取得します。

関連 EWIs

  1. 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) ]

Copy

サンプルソースパターン

テーブル作成時のNcharデータ型

Oracle
CREATE TABLE nchar_data_types
(
	nchar_column1 NCHAR,
	nchar_column2 NCHAR(5)
);

INSERT INTO nchar_data_types VALUES ('ភ', 'ភាសាខ');
Copy
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 ('ភ', 'ភាសាខ');
Copy

注釈

Oracleでは、これらの値を同じサイズの CHAR 列に挿入しようとすると、 value too large for column というエラーがトリガーされます。

Nchar列からの情報の取得

Oracle
SELECT * FROM nchar_data_types;
Copy
結果

NCHAR_COLUMN1

NCHAR_COLUMN2

ភាសាខ

Snowflake
SELECT * FROM
nchar_data_types;
Copy
結果

NCHAR_COLUMN1

NCHAR_COLUMN2

ភាសាខ

各列のサイズをバイト単位で取得する

Oracle
SELECT 
LENGTHB(nchar_column1),
LENGTHB(nchar_column2)
FROM nchar_data_types;
Copy
結果

LENGTHB(NCHAR_COLUMN1)

LENGTHB(NCHAR_COLUMN2)

                 2|                    10|
Copy
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;
Copy
結果

OCTET_LENGTH(NCHAR_COLUMN1)

OCTET_LENGTH(NCHAR_COLUMN2)

                      3|                         15|
Copy

列宣言で指定された数値はバイト単位ではなく文字単位のサイズであることに注意してください。そのため、これらの特殊文字を格納するために、より多くのスペースが使用されることがわかります。

注釈

Snowflakeでは、 VARCHAR は UTF-8を使用します。サイズは、1、2、3、または4バイトで表現できるUnicode文字によって異なります。この場合、カンボジア文字は3バイトで格納されます。

注意

このようなわずかな違いもありますが、データの統合は保たれています。

既知の問題

1.一部の組み込み関数から得られる結果は異なる場合があります

前のセクションで説明したように、列に対して組み込み関数を使用すると、異なる結果を取得する場合があります。例えば、列の長さを取得します。

関連 EWIs

  1. SSC-FDM-OR0015: LENGTHB が OCTET_LENGTH に変換されました。

NVARCHAR2 データ型

説明

NVARCHAR2 データ型は、国文字セットの可変長の文字列を指定します。(Oracle SQL 言語リファレンス NVARCHAR2)

NVARCHAR2 (size)

Copy

NVARCHAR2 では、Unicodeで特殊文字を保存して、どのような使用状況でも保持することができますが、これらの特殊文字を保存するには、より多くのビットが必要になる場合があります。そのため、デフォルトでは、 NVARCHAR2 文字セットは AL16UTF16 であり、これは通常 AL32UTF8 である VARCHAR2 の共通文字データセットとは対照的です。

Snowflake VARCHARに変換されたNVARCHAR、 VARCHAR2に関係する変換情報 もNVARCHAR2に対して有効です。

NVARCHAR2 (size)

Copy

サンプルソースパターン

テーブル作成時のNvarchar2データ型

Oracle
CREATE TABLE nvarchar2_data_types
(
	nvarchar2_column NVARCHAR2 (5)
);

INSERT INTO nvarchar2_data_types VALUES ('ភាសាខ');
Copy
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 ('ភាសាខ');
Copy

注釈

Oracleでは、これらの値を同じサイズの VARCHAR2 列に挿入しようとすると、 value too large for column というエラーがトリガーされます。

Nchar列からの情報の取得

Oracle
SELECT * FROM nvarchar2_data_types;
Copy
結果

NVARCHAR2_COLUMN

ភាសាខ

Snowflake
SELECT * FROM
nvarchar2_data_types;
Copy
結果

NVARCHAR2_COLUMN

ភាសាខ

各列のサイズをバイト単位で取得する

Oracle
SELECT 
LENGTHB(nvarchar2_column)
FROM nvarchar2_data_types;
Copy
結果

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

OCTET_LENGTH(NVARCHAR2_COLUMN)

15

列宣言で指定された数値はバイト単位ではなく文字単位のサイズであることに注意してください。そのため、これらの特殊文字を格納するために、より多くのスペースが使用されることがわかります。

注釈

Snowflakeでは、 VARCHAR は UTF-8を使用します。サイズは、1、2、3、または4バイトで表現できるUnicode文字によって異なります。この場合、カンボジア文字は3バイトで格納されます。

注意

このようなわずかな違いもありますが、データの統合は保たれています。

既知の問題

1.一部の組み込み関数から得られる結果は異なる場合があります

前のセクションで説明したように、列に対して組み込み関数を使用すると、異なる結果を取得する場合があります。例えば、列の長さを取得します。

関連 EWIs

  1. SSC-FDM-OR0015: LENGTHB が OCTET_LENGTH に変換されました。

VARCHAR データ型

説明

Oracleでは、ドキュメントで説明されているように、 VARCHAR の代わりに VARCHAR2 を使用することを推奨しています。

Oracle SQL 言語リファレンスVarchar

しかし、構文は ANSI、DB2、SQL/DSデータ型 を使って解析および変換されます。

VARCHAR2 データ型

説明

VARCHAR2 データ型は、データベース文字セットの 可変 長の文字列を指定します。(Oracle SQL 言語リファレンス VARCHAR2)

Oracleのドキュメントで示されているように、 VARCHAR2 データ型のサイズは長さの制約であり、容量と混同しないでください。VARCHAR2 に格納できる文字の合計は、データベースの文字セットや構成によって異なりますが、一般的に許容される最大サイズは4000です。

VARCHAR2 は、デフォルトでより大きなバイト数/文字数を格納できるSnowflake VARCHAR に翻訳されます。いずれにせよ、使用されるメモリはOracleと同じように列に格納された値のサイズを使って変数化されます。

VARCHAR2 (size [ BYTE | CHAR ])
Copy

サンプルソースパターン

テーブル作成時の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');
Copy
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');
Copy

varchar列からのデータの取得

Oracle
SELECT * FROM varchar2_data_types;
Copy
結果

VARCHAR2_COLUMN1

VARCHAR2_COLUMN2

VARCHAR2_COLUMN3

H

Hello

Hell

Snowflake
SELECT * FROM
varchar2_data_types;
Copy
結果

VARCHAR2_COLUMN1

VARCHAR2_COLUMN2

VARCHAR2_COLUMN3

H

Hello

Hell

列の変数サイズの見直し

Oracle
SELECT
LENGTHB(varchar2_column1),
LENGTHB(varchar2_column2),
LENGTHB(varchar2_column3) 
FROM VARCHAR2_DATA_TYPES;
Copy
結果

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

OCTET_LENGTH(VARCHAR2_COLUMN1)

OCTET_LENGTH(VARCHAR2_COLUMN2)

OCTET_LENGTH(VARCHAR2_COLUMN3)

1

5

4

既知の問題

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

関連 EWIs

  1. SSC-FDM-OR0015: LENGTHB が OCTET_LENGTH に変換されました。

LOB データ型

説明

組み込みのLOBデータ型 BLOBCLOBNCLOB (内部的に格納)および BFILE (外部的に格納)は、テキスト、画像、ビデオ、空間データなどの大規模な非構造化データを格納できます。(Oracle SQL Language Reference LOB Data Type)

BFILE
BLOB
CLOB
NCLOB
Copy

警告

LOBデータ型はSnowflakeでは サポートされていませんSnowflakeのドキュメント によると、 CLOBVARCHAR に、 BLOBBINARY に変換することが推奨されていますが、いくつかの制限があります。 {% 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;
Copy
結果

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

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

既知の問題

1.DBMS_LOB 組み込みパッケージにアクセスできません

Snowflakeでは LOB データ型がサポートされていないため、 DBMS_LOB 関数に相当するものはなく、回避策もまだ実装されていません。

関連 EWIs

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

データの取得

Oracle
SELECT * FROM blobtable;
Copy
結果

BLOB_COLUMN

EMPTY_COLUMN

[NULL]

[BLOB]

Snowflake
SELECT * FROM
blobtable;
Copy
結果

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

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

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

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

データの取得

Oracle
SELECT * FROM clobtable;
Copy
結果

CLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

Snowflake
SELECT * FROM
clobtable;
Copy
結果

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

データの取得

Oracle
SELECT * FROM nclobtable;
Copy
結果

NCLOB_COLUMN

EMPTY_COLUMN

THIS IS A TEST

Snowflake
SELECT * FROM
nclobtable;
Copy
結果

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 はありません。