SnowConvert AI - Oracle - SnowConvert AI カスタム UDFs¶
説明¶
Oracleの組み込み関数や機能の中には、Snowflakeでは利用できないものや動作が異なるものがあります。これらの違いを最小限にするため、一部の関数は SnowConvert AI カスタム UDFs に置き換えられます。
これらの UDFs は、移行中に、 出力 フォルダー内の UDF ヘルパー フォルダーに自動的に作成されます。カスタム UDF ごとに1つのファイルがあります。
BFILENAME UDF¶
説明¶
この関数は、Oracle BFILENAME() のディレクトリ名とファイル名のパラメーターを STRING として受け取り、 \ を用いてそれらを連結して返します。BFILE は VARCHAR に変換されるので、 BFILENAME の結果はテキストとして扱われます。
警告
オペレーティングシステムのファイル連結文字に対応するように、 \ を変更する必要があります。
カスタム UDF オーバーロード¶
BFILENAME_UDF(string, string)¶
ディレクトリパスとファイル名を連結します。
パラメーター
DIRECTORYNAME: ディレクトリパスを表す
STRING。FILENAME: ファイル名を表す
STRING。
UDF¶
Oracle¶
結果¶
COL1 |
|---|
[BFILE:myfile.png] |
Snowflake¶
結果¶
COL1 |
|---|
mydirectory\myfile.png |
既知の問題¶
1.DBMS_LOB 組み込みパッケージにアクセスできません¶
Snowflakeでは LOB データ型がサポートされていないため、 DBMS_LOB 関数に相当するものはなく、回避策もまだ実装されていません。
CAST_DATE UDF¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
このカスタム UDF は、プロシージャや関数の内部で文字列を DATE にキャストする際に、形式の違いによって発生するランタイム例外を回避するために追加されました。
カスタム UDF オーバーロード¶
CAST_DATE_UDF(datestr)¶
STRING から DATE を作成します。
パラメーター
DATESTR:
DATEを特定の形式で表すSTRING。
UDF¶
Oracle¶
結果¶
COL1 |
|---|
1996-03-20 00:00:00.000 |
Snowflake¶
結果¶
COL1 |
|---|
1996-03-20 |
既知の問題¶
1.Oracle DATE には TIMESTAMP が含まれています¶
Oracleの DATE には空の TIMESTAMP (00:00:00.000)が含まれていますが、Snowflakeの DATE には含まれていないことを考慮してください。 SnowConvert AI では、 SysdateAsCurrentTimestamp フラグで DATE から TIMESTAMP に変換できます。
関連 EWIs¶
SSC-FDM-OR0042: タイムスタンプに変換された日付タイプの動作が異なります
DATE_TO_JULIANDAYS_UDF¶
説明¶
DATE_TO_JULIANDAYS_UDF()関数は DATE を受け取り、1月1日4712 BC からの日数を返します。この関数は、Oracle TO_CHAR(DATE,'J')と同等です。
カスタム UDF オーバーロード¶
DATE_TO_JULIANDAYS_UDF(date)¶
パラメーター
INPUT_DATE: 操作の
DATE。
UDF¶
使用例¶
Oracle¶
Snowflake¶
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-FDM-OR0042: タイムスタンプに変換された日付タイプの動作が異なります
DATEADD UDF¶
説明¶
この UDF は、 DATE または TIMESTAMP タイプと FLOAT タイプの間に追加がある場合のすべてのテンプレートとして使用されます。
カスタム UDF オーバーロード¶
DATEADD_UDF(date, float)¶
パラメーター
FIRST_PARAM: 操作の最初の
DATE。SECOND_PARAM: 追加される
FLOAT。
UDF¶
DATEADD_UDF(float, date)¶
パラメーター
FIRST_PARAM: 追加される
FLOAT。SECOND_PARAM: 操作の
DATE。
UDF¶
DATEADD_UDF(timestamp, float)¶
パラメーター
FIRST_PARAM: 操作の最初の
TIMESTAMP。SECOND_PARAM: 追加される
FLOAT。
UDF¶
DATEADD_UDF(float, timestamp)¶
パラメーター
FIRST_PARAM: 操作の
FLOAT。SECOND_PARAM: 操作の
TIMESTAMP。
UDF¶
使用例¶
Oracle¶
結果¶
TO_TIMESTAMP('03/08/2009,12:47AM','DD/MM/YY,HH:MIAM')+62.40750856543442 |
|---|
2009-10-04 10:33:49.000 |
Snowflake¶
結果¶
|PUBLIC.DATEADD_UDF(
TO_TIMESTAMP('03/08/2009, 12:47 AM', 'DD/MM/YY, HH12:MI AM'), 62.40750856543442) |
|---|
2009-10-04 00:47:00.000 |
既知の問題¶
1.時間精度の違い¶
日付またはタイムスタンプと浮動小数点数の間で操作が行われる場合、時間はOracleと異なる場合があります。この問題を解決するためのアクションアイテムがあります。
関連 EWIs¶
関連する EWIs なし。
DATEDIFF UDF¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
この UDF は、 DATE、 TIMESTAMP、およびその他のタイプ(Intervalsを除く)との間に減算がある場合のすべてのテンプレートとして使用されます。
カスタム UDF オーバーロード¶
DATEDIFF_UDF(date, date)¶
パラメーター
FIRST_PARAM: 操作の最初の
DATE。SECOND_PARAM: 減算される
DATE。
UDF¶
DATEDIFF_UDF(date, timestamp)¶
パラメーター
FIRST_PARAM: 操作の最初の
DATE。SECOND_PARAM: 減算される
TIMESTAMP。
UDF¶
DATEDIFF_UDF(date, integer)¶
パラメーター
FIRST_PARAM: 操作の最初の
DATE。SECOND_PARAM: 減算される
INTEGER。
UDF¶
DATEDIFF_UDF(timestamp, timestamp)¶
パラメーター
FIRST_PARAM: 操作の最初の
TIMESTAMP。SECOND_PARAM: 減算される
TIMESTAMP。
UDF¶
DATEDIFF_UDF(timestamp, date)¶
パラメーター
FIRST_PARAM: 操作の最初の
TIMESTAMP。SECOND_PARAM: 減算される
DATE。
UDF¶
DATEDIFF_UDF(timestamp, number)¶
パラメーター
FIRST_PARAM: 操作の最初の
TIMESTAMP。SECOND_PARAM: 減算される
NUMBER。
UDF¶
使用例¶
注釈
unknownはタイプが解決できなかった列で、タイムスタンプ、日付の整数、数値の可能性があります。
注釈
--disableDateAsTimestamp
SYSDATE を CURRENT_DATE または CURRENT_TIMESTAMP に変換すべきかどうかを示すフラグ。これは、 TIMESTAMP に変換されるすべての DATE 列にも影響します。
Oracle¶
Snowflake¶
既知の問題¶
1.タイムスタンプの機能差¶
UDF から返されるSnowflakeの値が、時間の関係でOracleの値と異なる場合があります。次の例を考えてみましょう
Oracle¶
結果¶
ASTIMESTAMP-UNKNOWN |
|---|
4417 23:0:0.0 |
Snowflake¶
結果¶
PUBLIC.DATEDIFF_UDF( ASTIMESTAMP, UNKNOWN) |
|---|
4418 |
関連 EWIs¶
SSC-EWI-OR0036:型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
SSC-FDM-OR0042:日付型をタイムスタンプに変換すると異なる動作をします。
JSON_VALUE UDF¶
Oracle JSON_VALUE 関数をSnowflakeに変換するための翻訳リファレンス
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
Oracleのドキュメントによると、この関数は SQL/JSON パス式 を使用して、 JSON インスタンスの一部に関する情報をリクエストします。戻り値は常にスカラー値で、そうでなければ関数はデフォルト値で NULL を返します。
JSON_VALUE_UDF は、 Stefan Goessner が開発したオリジナルの JavaScript 実装の修正バージョンを使用した、 JSONPath 仕様のSnowflake実装です。
サンプルソースパターン¶
セットアップデータ¶
これらのクエリを実行すると、 JSON_VALUE パターンセクションのクエリが実行されます。
Oracle¶
Snowflake¶
JSON_VALUE パターン¶
Oracle¶
結果¶
JSON パス |
クエリ結果 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake¶
結果¶
JSON パス |
クエリ結果 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NOT SUPPORTED |
|
NOT SUPPORTED |
既知の問題¶
1.Returning Type句は完全にサポートされていません¶
現在、 RETURNING TYPE 句の機能を翻訳する際にサポートされているタイプは、 VARCHAR2、 CLOB、 NUMBER のみです。
元の JSON_VALUE 関数でサポートされている他のすべてのタイプについては、 JSON_VALUE_UDF は RETURNING TYPE 句が指定されていないかのように動作します。
サポートされていないタイプ:
DATETIMESTAMP [WITH TIME ZONE]SDO_GEOMETRYCUSTOM TYPE
2.ON MISMATCH 句はサポートされていません¶
現在、 ON MISMATCH 句はサポートされておらず、代わりに警告 EWI が表示されます。したがって、翻訳されたコードは、 ON MISMATCH 句が元々指定されていなかったかのように動作します。
3.複雑なフィルターはサポートされていません¶
複数の式を持つ複雑なフィルターはサポートされていないためnullを返します。
例えば、先ほどと同じデータで、この JSON パス $.store.book[*]?(@.category == "reference").title がサポートされており、 'Sayings of the Century' を返します。
しかし、 $.store.book[*]?(@.category == "reference" && @.price < 10).title は、フィルターに複数の式が使用されているため、 null を返します。
関連 EWIs¶
SSC-EWI-0021:Snowflakeではサポートされていません。
JULIAN TO GREGORIAN DATE UDF¶
説明¶
このユーザー定義関数(UDF)は、ユリウス日付形式をグレゴリオ日付形式に変換するために使用されます。ユリウス日付は、 JD Edwards World、天文学、または通常の形式など、3つの異なる形式で受信することができます。
カスタム UDF オーバーロード¶
JULIAN_TO_GREGORIAN_DATE_UDF(julianDate, formatSelected)¶
グレゴリオ日付形式 YYYY-MM-DD の文字列を返します。
パラメーター:¶
JulianDate: キャストされるユリウス日付。CYYDDD (Cは世紀)または YYYYDDD のいずれかになります。
formatSelected: ユリウス日付の処理形式を表します。また、これは CHAR であり、以下の形式を受け入れることができます。
利用可能な形式 |
CHAR の文字表現 |
説明 |
|---|---|---|
標準化された天文学 |
'J' |
デフォルトの形式です。このキャストは、 US の天文応用部門の将来の変換を念頭に置いています。この場合のユリウス日付形式は YYYYDDD です。 |
JD Edwards World |
'E' |
この場合、受け取る予定のユリウス日付は CYYDDD になります(ここで、Cは世紀を表し、対応する数値に19を加算して計算されます)。 |
序数日付 |
'R' |
序数日付は、簡潔な日付を表す数字の配列です。形式は YYYYDDD で、年の部分は変更できないため簡単に読むことができます。 |
UDF¶
使用例¶
Oracle¶
結果¶
TO_DATE('2020001', 'J') |
|---|
18-JUN-18 |
フォーマットされた結果¶
TO_CHAR(TO_DATE('2020001', 'J'), 'YYYY-MON-DD') |
|---|
0818-JUN-18 |
Note: The date must be formatted to visualize all digits of the year.
Snowflake¶
結果¶
JULIAN_TO_GREGORIAN_DATE_UDF('2020001', 'J') |
|---|
「0818-06-18」 |
既知の問題¶
その他の形式: ユリウス日付がサポートされていない形式で形式化されている場合、出力に違いが生じます。
日付のSnowflake関数がサポートされていないため、B.C.日付の範囲が矛盾している可能性があります。
関連 EWIs¶
関連する EWIs なし。
MONTHS BETWEEN UDF [DEPRECATED]¶
危険
この UDF は廃止されました。Oracle MONTHS_BETWEEN()の現在の変換は Snowflake MONTHS_BETWEEN()です。
説明¶
MONTHS_BETWEENは、日付date1とdate2の間の月数を返します。(Oracle MONTHS_BETWEEN SQL 言語リファレンス)
Oracle MONTHS_BETWEEN とSnowflake MONTHS_BETWEEN 関数には、いくつかの機能的な違いがあります。これらの違いを最小化し、Oracle MONTHS_BETWEEN 関数をよりよく複製するために、カスタム UDF を追加しました。
カスタム UDF オーバーロード¶
MONTHS_BETWEEN_UDF(timestamp_ltz, timestamp_ltz)¶
パラメーター
FIRST_DATE: 操作の最初の
TIMESTAMP_LTZ。SECOND_DATE: 操作の2番目の
TIMESTAMP_LTZ。
UDF¶
Oracle¶
結果¶
MONTHS_BETWEEN('2000-03-2022:01:11','1996-03-2010:01:11') |
MONTHS_BETWEEN('1996-03-2022:01:11','2000-03-2010:01:11') |
MONTHS_BETWEEN('1982-05-1122:31:19','1900-01-2515:21:15') |
MONTHS_BETWEEN('1999-12-2501:15:16','1900-12-1102:05:16') |
|---|---|---|---|
48 |
-48 |
987.558021206690561529271206690561529271 |
1188.450492831541218637992831541218637993 |
Snowflake¶
結果¶
MONTHS_BETWEEN_UDF('2000-03-20 22:01:11', '1996-03-20 10:01:11') |
MONTHS_BETWEEN_UDF('1996-03-20 22:01:11', '2000-03-20 10:01:11') |
MONTHS_BETWEEN_UDF('1982-05-11 22:31:19', '1900-01-25 15:21:15') |
MONTHS_BETWEEN_UDF('1999-12-25 01:15:16', '1900-12-11 02:05:16') |
|---|---|---|---|
48.000000 |
-48.000000 |
987.558024 |
1188.450497 |
既知の問題¶
1.精度はOracleと異なる場合があります¶
結果によっては小数点の桁数が異なる場合があります。
関連 EWIs¶
関連 EWIs はありません。
REGEXP LIKE UDF¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
REGEXP_LIKEは正規表現マッチングを行います。この条件は、入力文字セットで定義された文字を使用して文字列を評価します。(Oracle言語リファレンス REGEXP_LIKE 条件)
Oracle REGEXP_LIKE とSnowflake REGEXP_LIKE 条件には、いくつかの機能的な違いがあります。これらの違いを最小化し、Oracle REGEXP_LIKE 関数をよりよく複製するために、カスタム UDF を追加しました。主なアイデアは、バックスラッシュ記号が必要な正規表現からバックスラッシュ記号をエスケープすることです。これらは、バックスラッシュを伴う場合にエスケープする必要がある特殊文字です: 'd'、'D'、'w'、'W'、's'、'S'、'A'、'Z'、'n'。また、 後方参照式 (「指定された数」のキャプチャグループによって最近マッチしたものと同じテキストにマッチする)は、エスケープする必要があります。
カスタム UDF オーバーロード¶
REGEXP_LIKE_UDF(string, string)¶
パラメーター¶
COL: は検索値となる文字式です。
PATTERN: は正規表現です。
UDF¶
Oracle¶
Snowflake¶
REGEXP_LIKE_UDF(string, string, string)¶
パラメーター¶
COL: は検索値となる文字式です。
PATTERN: は正規表現です。
MATCHPARAM: 条件のデフォルトのマッチング動作を変更する文字式です。次のテーブルは、Oracle文字とその説明、および UDF における等価文字です。
マッチパラメーター |
説明 |
UDF の同等物 |
|---|---|---|
'i' |
条件の決定された照合が大文字と小文字を区別する場合でも、大文字と小文字を区別しない一致を指定します。 |
'i' |
'c' |
条件の決定された照合が大文字と小文字を区別しない、またはアクセントを区別しない場合でも、大文字と小文字を区別し、アクセントを区別する一致を指定します。 |
同等物はありません。パラメーターから削除されます。 |
'n' |
任意の文字に一致するワイルドカード文字であるピリオド(.)が改行文字に一致するようにします。このパラメーターを省略した場合、ピリオドは改行文字と一致しません。 |
's' |
'm' |
ソース文字列を複数行として扱います。Oracleは、 |
'm' |
'x' |
空白文字を無視します。デフォルトでは、空白文字はそれ自体に一致します。 |
同等物はありません。パラメーターから削除されます。 |
UDF¶
Oracle¶
Snowflake¶
既知の問題¶
1. UDF マッチパラメーターが期待通りに動作しない可能性があります¶
Oracleのマッチパラメーターで使用可能なすべての文字がユーザー定義関数で同等の機能を持っていないため、クエリ結果はOracleと比較して機能的に異なる場合があります。
2.UDF パターンパラメーターでは、正規表現として「\\」のみは使用できません¶
パターンパラメーターとして使用される正規表現が「\\」のみである場合、次のような例外がスローされます: JavaScript 実行エラー: キャッチされない SyntaxError: 無効な正規表現: //: \ REGEXP_LIKE_UDF パターンの末尾、'return COL.match(new RegExp(PATTERN));' 位置17スタックトレース: REGEXP_LIKE_UDF
TIMESTAMP DIFF UDF¶
説明¶
Snowflake does not support the addition operation between TIMESTAMP data types with the - operand. To replicate this functionality, we have added a custom UDF.
カスタム UDF オーバーロード¶
TIMESTAMP_DIFF_UDF(timestamp, timestamp)¶
パラメーター
LEFT_TS: 操作の最初の
TIMESTAMP。RIGHT_TS: 追加される
TIMESTAMP。
UDF¶
Oracle¶
結果¶
COL1-COL2 |
|---|
1461 12:0:0.0 |
-1460 12:0:0.0 |
30056 7:10:4.0 |
36172 23:10:0.0 |
Snowflake¶
結果¶
TIMESTAMP_DIFF_UDF( COL1, COL2) |
|---|
+000001461 12:00:00.00000000 |
-000001460 12:00:00.00000000 |
+000030056 07:10:04.00000000 |
+000036172 23:10:00.00000000 |
既知の問題¶
1.TIMESTAMP 形式がOracleと異なる場合があります¶
TIMESTAMP 形式がOracleと異なる場合があります。TIMESTAMP データ型を使用する場合は、TIMESTAMP_OUTPUT_FORMAT 設定 を考慮してください。
関連 EWIs¶
関連 EWIs はありません。
TRUNC (date) UDF¶
説明¶
TRUNC(date)関数は、形式モデルfmtで指定された単位に時刻部分が切り捨てられたdateを返します。(Oracle TRUNC(date) SQL 言語リファレンス)
Oracle TRUNC とSnowflake TRUNC 関数の日付引数にはいくつかの機能的な違いがあります。
以下のケースを処理するために TRUNC_UDF ヘルパーが追加されます。
1.この形式はSnowflakeではサポートされていません。
2.この形式はSnowflakeにも存在しますが、動作は異なります。
3.ツールは第1引数のデータ型を判別できません。
4.形式はリテラルではなく、列または式として提供されます。
カスタム UDF オーバーロード¶
TRUNC_UDF(date)¶
入力されたタイムスタンプに対して、明示的な DATE の キャスト を適用します。
パラメーター
INPUT: 切り捨てる必要があるタイムゾーン(TIMESTAMP_LTZ) 付きのタイムスタンプ。
警告
UDF のデフォルトパラメーターは TIMESTAMP_LTZ です。ユーザーが使用するデフォルトの TIMESTAMP に合わせて、TIMESTAMP_TZ または TIMESTAMP_NTZ に変更する必要があるかもしれません。
UDF¶
Oracle¶
結果¶
Date |
|---|
1996-03-20 00:00:00.000 |
Snowflake¶
結果¶
DATE |
|---|
1996-03-20 |
TRUNC_UDF(date, fmt)¶
DATE_FROM_PARTS() 関数 を使用して、使用する形式カテゴリに応じて新しい日付を手動で作成します。
パラメーター
DATE_TO_TRUNC: 切り捨てる必要があるタイムゾーン(TIMESTAMP_LTZ) 付きのタイムスタンプ。
DATE_FMT: 日付形式としての VARCHAR。Oracleで サポートされている形式 と同じです。
警告
UDF のデフォルトパラメーターは TIMESTAMP_LTZ です。ユーザーが使用するデフォルトの TIMESTAMP に合わせて、TIMESTAMP_TZ または TIMESTAMP_NTZ に変更する必要があるかもしれません。
UDF¶
TRUNC 形式シナリオ¶
警告
結果の形式は、データベース用に構成された DateTime 出力形式に依存します。
1.ネイティブ対応形式¶
Oracle¶
結果¶
TRUNC(TO_DATE('20/04/2022 13:21:10','DD/MM/YYYY HH24:MI:SS'),'YYYY') |
|---|
01-JAN-22 |
01-JAN-22 |
01-JAN-22 |
01-JAN-22 |
01-JAN-22 |
01-APR-22 |
01-APR-22 |
01-APR-22 |
01-APR-22 |
20-APR-22 |
20-APR-22 |
20-APR-22 |
Snowflake¶
結果¶
TRUNC(TO_DATE('20/04/2022 13:21:10','DD/MM/YYYY HH24:MI:SS'),'YYYY') |
|---|
2022-01-01 |
2022-01-01 |
2022-01-01 |
2022-01-01 |
2022-01-01 |
2022-04-01 |
2022-04-01 |
2022-04-01 |
2022-04-01 |
2022-04-20 |
2022-04-20 |
2022-04-20 |
2.別の形式にマッピングされた形式¶
Oracle¶
結果¶
TRUNC(TO_DATE('20/04/2022 13:21:10','DD/MM/YYYY HH24:MI:SS')) |
|---|
20-APR-22 |
01-JAN-22 |
01-JAN-22 |
01-APR-22 |
18-APR-22 |
20-APR-22 |
20-APR-22 |
20-APR-22 |
20-APR-22 |
Snowflake¶
結果¶
TRUNC(TO_DATE('20/04/2022 13:21:10','DD/MM/YYYY HH24:MI:SS'), 'DD') |
|---|
2022-04-20 |
2022-01-01 |
2022-01-01 |
2022-04-01 |
2022-04-18 |
2022-04-20 |
2022-04-20 |
2022-04-20 |
2022-04-20 |
3.日の形式¶
Oracle¶
結果¶
TRUNC(TO_DATE('20/04/2022 13:21:10','DD/MM/YYYY HH24:MI:SS'),'DAY') |
|---|
17-APR-22 |
17-APR-22 |
17-APR-22 |
Snowflake¶
結果¶
TRUNC_UDF(TO_DATE('20/04/2022 13:21:10','DD/MM/YYYY HH24:MI:SS'),'DAY') |
|---|
2022-04-17 |
2022-04-17 |
2022-04-17 |
4.サポートされていない形式¶
Oracle¶
結果¶
TRUNC(TO_DATE('20/04/2022 13:21:10','DD/MM/YYYY HH24:MI:SS'),'CC') |
|---|
01-JAN-01 |
01-JAN-01 |
03-JAN-22 |
03-JAN-22 |
03-JAN-22 |
16-APR-22 |
15-APR-22 |
Snowflake¶
結果¶
TRUNC_UDF(TO_DATE('20/04/2022 13:21:10','DD/MM/YYYY HH24:MI:SS'),'CC') |
|---|
2001-01-01 |
2001-01-01 |
2022-01-03 |
2022-01-03 |
2022-01-03 |
2022-04-16 |
2022-04-15 |
注釈
TRUNC 関数が、サポートされていない形式または SnowConvert AI で扱えないパラメーターで使用された場合。問題を避けるため、形式が有効な形式に置き換えられるか、 TRUNC_UDF が追加されます。
既知の問題¶
1.Oracle DATE には TIMESTAMP が含まれています¶
Oracleの DATE には空の TIMESTAMP (00:00:00.000)が含まれていますが、Snowflakeの DATE には含まれていないことを考慮してください。
関連 EWIs¶
関連 EWIs はありません。
TRUNC (数値) UDF¶
説明¶
TRUNC(数値)関数はn1をn2小数点以下の桁数で切り捨てたものを返します。n2が省略された場合、n1は0位に切り捨てられます。n2を負にすると、n2の小数点の左側の桁を切り捨てます(ゼロにします)。(Oracle TRUNC (数値) SQL 言語リファレンス)
最初の列が認識できないデータ型を持つ ケースを扱うために、数値用の ୧TRUNC_UDF が追加されます。
例:
column1 の定義がツールに提供されていない場合。その後、 TRUNC_UDF が追加され、実行時に TRUNC_UDF のオーバーロードによって、数値型か日付型かのケースが処理されます。
TRUNC (DATE) セクションを参照してください。
以下のセクションでは、 TRUNC_UDF が完全な数値を扱うことを証明します。
カスタム UDF オーバーロード¶
TRUNC_UDF(n1)¶
It calls Snowflake TRUNC function with the input number. This overload exists to handle the different types of parameter scenarios, in case that information is not available during the migration.
パラメーター
INPUT: 切り捨てる必要のある
NUMBER。
UDF¶
Oracle¶
結果¶
TRUNC(1.000001) |
TRUNC(15.79) |
TRUNC(-975.975) |
TRUNC(135.135) |
|---|---|---|---|
1 |
15 |
-975 |
135 |
Snowflake¶
結果¶
TRUNC_UDF(1.000001) |
TRUNC_UDF(15.79) |
TRUNC_UDF(-975.975) |
TRUNC_UDF(135.135) |
|---|---|---|---|
1 |
15 |
-975 |
135 |
TRUNC_UDF(n1, n2)¶
It calls Snowflake TRUNC function with the input number and the scale. This overload exists to handle the different types of parameter scenarios, in case that information is not available during the migration.
パラメーター
INPUT: 切り捨てる必要のある
NUMBER。SCALE: 小数点以下の出力桁数を表します。
UDF¶
Oracle¶
結果¶
TRUNC(1.000001,-2) |
TRUNC(1.000001,-1) |
TRUNC(1.000001,0) |
TRUNC(1.000001,1) |
TRUNC(1.000001,2) |
TRUNC(15.79,-2) |
TRUNC(15.79,-1) |
TRUNC(15.79,0) |
TRUNC(15.79,1) |
TRUNC(15.79,50) |
TRUNC(-9.6,-2) |
TRUNC(-9.6,-1) |
TRUNC(-9.6,0) |
TRUNC(-9.6,1) |
TRUNC(-9.6,2) |
TRUNC(-975.975,-3) |
TRUNC(-975.975,-2) |
TRUNC(-975.975,-1) |
TRUNC(-975.975,0) |
TRUNC(-975.975,1) |
TRUNC(-975.975,2) |
TRUNC(-975.975,3) |
TRUNC(-975.975,5) |
TRUNC(135.135,-10) |
TRUNC(135.135,-2) |
TRUNC(135.135,0) |
TRUNC(135.135,1) |
TRUNC(135.135,2) |
TRUNC(135.135,3) |
TRUNC(135.135,5) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 |
0 |
1 |
1 |
1 |
0 |
10 |
15 |
15.7 |
15.79 |
0 |
0 |
-9 |
-9.6 |
-9.6 |
0 |
-900 |
-970 |
-975 |
-975.9 |
-975.97 |
-975.975 |
-975.975 |
0 |
100 |
135 |
135.1 |
135.13 |
135.135 |
135.135 |
Snowflake¶
結果¶
TRUNC_UDF ( 1.000001, -2 ) |
TRUNC_UDF ( 1.000001, -1 ) |
TRUNC_UDF ( 1.000001, 0 ) |
TRUNC_UDF ( 1.000001, 1 ) |
TRUNC_UDF ( 1.000001, 2 ) |
TRUNC_UDF ( 15.79, -2) |
TRUNC_UDF ( 15.79, -1) |
TRUNC_UDF ( 15.79, 0) |
TRUNC_UDF ( 15.79, 1 ) |
TRUNC_UDF ( 15.79, 50 ) |
TRUNC_UDF ( -9.6, -2 ) |
TRUNC_UDF ( -9.6, -1 ) |
TRUNC_UDF ( -9.6, 0 ) |
TRUNC_UDF ( -9.6, 1 ) |
TRUNC_UDF ( -9.6, 2 ) |
TRUNC_UDF ( -975.975, -3 ) |
TRUNC_UDF ( -975.975, -2 ) |
TRUNC_UDF ( -975.975, -1 ) |
TRUNC_UDF ( -975.975, 0 ) |
TRUNC_UDF ( -975.975, 1 ) |
TRUNC_UDF ( -975.975, 2 ) |
TRUNC_UDF ( -975.975, 3 ) |
TRUNC_UDF ( -975.975, 5 ) |
TRUNC_UDF ( 135.135, -10 ) |
TRUNC_UDF ( 135.135, -2 ) |
TRUNC_UDF ( 135.135, 0 ) |
TRUNC_UDF ( 135.135, 1 ) |
TRUNC_UDF ( 135.135, 2 ) |
TRUNC_UDF ( 135.135, 3 ) |
TRUNC_UDF ( 135.135, 5 ) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 |
0 |
1 |
1.0 |
1.00 |
0 |
10 |
15 |
15.7 |
15.79 |
0 |
0 |
-9 |
-9.6 |
-9.6 |
0 |
-900 |
-970 |
-975 |
-975.9 |
-975.97 |
-975.975 |
-975.975 |
0 |
100 |
135 |
135.1 |
135.13 |
135.135 |
135.135 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連 EWIs はありません。
SnowConvert AI - Oracle - INTERVAL UDFs¶
INTERVAL UDFs の実行に必要なコード¶
To run any of the interval UDFs, it is necessary to run the following code before:
DATEADD UDF INTERVAL¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
この UDF は、次のような間隔のある操作を解決するために使用されます。
INTERVAL + DATE
INTERVAL + TIMESTAMP
DATE + INTERVAL
DATE + TIMESTAMP
INTERVAL + UNKNOWN
UNKNOWN + INTERVAL
注釈
An UNKNOWN type is a column or expression whose type could not be resolved by Snow Convert, it tends to happen when the DDLs for tables are not included in the migration or when there is an expression or subquery that can return different data types.
カスタム UDF オーバーロード¶
DATEADD_UDF(string, date)¶
パラメーター
INTERVAL_VALUE: 操作の間隔
文字列。D: 間隔が追加される
DATE。
UDF¶
DATEADD_UDF(date, string)¶
パラメーター
D: 間隔が追加される
DATE。INTERVAL_VALUE: 操作の間隔
文字列。
UDF¶
DATEADD_UDF(string, timestamp)¶
パラメーター
INTERVAL_VALUE: 操作の間隔
文字列。D: 間隔が追加される
TIMESTAMP。
UDF¶
DATEADD_UDF(timestamp, string)¶
パラメーター
D: 間隔が追加される
TIMESTAMP。INTERVAL_VALUE: 操作の間隔
文字列。
UDF¶
使用例¶
注釈
--disableDateAsTimestamp
SYSDATE を CURRENT_DATE または CURRENT_TIMESTAMP に変換すべきかどうかを示すフラグ。これは、 TIMESTAMP に変換されるすべての DATE 列にも影響します。
Oracle¶
結果¶
Snowflake¶
注釈
この構成はSnowflakeで使用されました
結果¶
既知の問題¶
1.INTERVAL + INTERVAL 操作はサポートされていません¶
Snowflakeは INTERVAL + INTERVAL 操作をサポートしていません。
関連 EWIs¶
SSC-EWI-OR0036:型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
SSC-EWI-OR0095:Interval型とDate型の間の操作はサポートされていません。
SSC-FDM-0007:依存関係が欠落している要素。
SSC-FDM-OR0042:日付型をタイムスタンプに変換すると異なる動作をします。
DATEDIFF UDF INTERVAL¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
この UDF は、次のような間隔のある操作を解決するために使用されます。
INTERVAL - UNKNOWN
UNKNOWN - INTERVAL
DATE - INTERVAL
TIMESTAMP - INTERVAL
注釈
An UNKNOWN type is a column or expression whose type could not be resolved by Snow Convert, it tends to happen when the DDLs for tables are not included in the migration or when there is an expression or subquery that can return different data types.
カスタム UDF オーバーロード¶
DATEADD_DDIF(string, date)¶
パラメーター
INTERVAL_VALUE: 操作の間隔
文字列。D: 間隔が減算される
DATE。
UDF¶
DATEADD_DIFF(date, string)¶
パラメーター
D: 間隔が減算される
DATE。INTERVAL_VALUE: 操作の間隔
文字列。
UDF¶
DATEADD_DIFF(string, timestamp)¶
パラメーター
INTERVAL_VALUE: 操作の間隔
文字列。D: 間隔が減算される
TIMESTAMP。
UDF¶
DATEADD_DIFF(timestamp, string)¶
パラメーター
D: 間隔が減算される
TIMESTAMP。INTERVAL_VALUE: 操作の間隔
文字列。
UDF¶
使用例¶
注釈
--disableDateAsTimestamp
SYSDATE を CURRENT_DATE または CURRENT_TIMESTAMP に変換すべきかどうかを示すフラグ。これは、 TIMESTAMP に変換されるすべての DATE 列にも影響します。
Oracle¶
結果¶
Snowflake¶
注釈
この構成はSnowflakeで使用されました
結果¶
既知の問題¶
1.INTERVAL - INTERVAL 操作はサポートされていません¶
Snowflakeは INTERVAL - INTERVAL 操作をサポートしていません。
関連 EWIs¶
SSC-EWI-OR0036:型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
SSC-EWI-OR0095:Interval型とDate型の間の操作はサポートされていません。
SSC-FDM-0007:依存関係が欠落している要素。
SSC-FDM-OR0042:日付型をタイムスタンプに変換すると異なる動作をします。