SnowConvert AI – Oracle – Kundenspezifische UDFs von SnowConvert AI¶
Beschreibung¶
Einige integrierte Oracle-Funktionen und Verhalten sind in Snowflake möglicherweise nicht verfügbar oder verhalten sich anders. Um diese Unterschiede zu minimieren, werden einige Funktionen durch kundenspezifische SnowConvert AI-UDFs ersetzt.
Diese UDFs werden während der Migration automatisch erstellt, und zwar im Ordner UDF-Hilfsfunktion, innerhalb des Ordners Ausgabe. Es gibt eine Datei pro benutzerdefinierter UDF.
BFILENAME UDF¶
Beschreibung¶
Diese Funktion nimmt den Verzeichnisnamen und die Dateinamen-Parameter des Oracle BFILENAME() als STRING und gibt eine Verkettung davon mit \ zurück. Da BFILE in VARCHAR übersetzt wird, wird das Ergebnis BFILENAME als Text behandelt.
Warnung
\ muss so geändert werden, dass es mit dem entsprechenden Dateiverkettungszeichen des Betriebssystems übereinstimmt.
Benutzerdefinierte UDF-Überlastungen¶
BFILENAME_UDF(string, string)¶
Es verkettet den Verzeichnispfad und den Dateinamen.
Parameter
DIRECTORYNAME: Eine
STRING, die den Verzeichnispfad darstellt.FILENAME: Eine
STRING, die den Dateinamen darstellt.
UDF¶
Oracle¶
Ergebnis¶
COL1 |
|---|
[BFILE:myfile.png] |
Snowflake¶
Ergebnis¶
COL1 |
|---|
mydirectory\myfile.png |
Bekannte Probleme¶
1. No access to the DBMS_LOB built-in package¶
Da LOB-Datentypen in Snowflake nicht unterstützt werden, gibt es kein Äquivalent für die DBMS_LOB-Funktionen und es sind noch keine Umgehungsmöglichkeiten implementiert.
CAST_DATE UDF¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese benutzerdefinierte UDF wurde hinzugefügt, um Laufzeitausnahmen zu vermeiden, die durch Formatunterschiede beim Umwandeln von Zeichenfolgen in DATE, innerhalb von Prozeduren und Funktionen, verursacht werden.
Benutzerdefinierte UDF-Überlastungen¶
CAST_DATE\_UDF(datestr)¶
Erstellt ein DATE aus einer STRING.
Parameter
DATESTR: Eine
STRING, die einDATEmit einem bestimmten Format darstellt.
UDF¶
Oracle¶
Ergebnis¶
COL1 |
|---|
1996-03-20 00:00:00.000 |
Snowflake¶
Ergebnis¶
COL1 |
|---|
1996-03-20 |
Bekannte Probleme¶
1. Oracle DATE contains TIMESTAMP¶
Berücksichtigen Sie, dass die DATE-Funktion von Oracle einen leeren TIMESTAMP (00:00:00,000) enthält, während dies bei der DATE-Funktion von Snowflake nicht der Fall ist. SnowConvert AI ermöglicht die Transformation von DATE in TIMESTAMP mit dem SysdateAsCurrentTimestamp-Flag.
Zugehörige EWIs¶
[SSC-FDM-OR0042](../../../general/technical-documentation/issues-and-troubleshooting/functional-difference/oracleFDM. md#ssc-fdm-or0042): In Zeitstempel umgewandelter Datumstyp zeigt eine andere Verhaltensweise
DATE_TO_JULIANDAYS_UDF¶
Beschreibung¶
Die Funktion DATE_TO_JULIANDAYS_UDF() nimmt ein DATE und gibt die Anzahl der Tage seit dem 1. Januar 4712 BC zurück. Diese Funktion entspricht der Oracle-Funktion TO_CHAR(DATE, ‚J‘)
Benutzerdefinierte UDF-Überlastungen¶
DATE_TO_JULIANDAYS\_UDF(date)¶
Parameter
INPUT_DATE:
DATEder Operation.
UDF¶
Verwendungsbeispiel¶
Oracle¶
Snowflake¶
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
[SSC-FDM-OR0042](../../../general/technical-documentation/issues-and-troubleshooting/functional-difference/oracleFDM. md#ssc-fdm-or0042): In Zeitstempel umgewandelter Datumstyp zeigt eine andere Verhaltensweise
DATEADD UDF¶
Beschreibung¶
Diese UDF wird als Vorlage für alle Fälle verwendet, in denen es eine Addition zwischen einem Typ DATE oder TIMESTAMP und einem Typ FLOAT gibt.
Benutzerdefinierte UDF-Überlastungen¶
DATEADD_UDF(date, float)¶
Parameter
FIRST_PARAM: Das erste
DATEder Operation.SECOND_PARAM:
FLOATmuss hinzugefügt werden.
UDF¶
DATEADD_UDF(float, date)¶
Parameter
FIRST_PARAM:
FLOATmuss hinzugefügt werden.SECOND_PARAM:
DATEder Operation.
UDF¶
DATEADD_UDF(timestamp, float)¶
Parameter
FIRST_PARAM: Das erste
TIMESTAMPder Operation.SECOND_PARAM:
FLOATmuss hinzugefügt werden.
UDF¶
DATEADD_UDF(float, timestamp)¶
Parameter
FIRST_PARAM:
FLOATder Operation.SECOND_PARAM:
TIMESTAMPder Operation.
UDF¶
Verwendungsbeispiel¶
Oracle¶
Ergebnis¶
TO_TIMESTAMP(‚03/08/2009,12:47AM‘,‘DD/MM/YY,HH:MIAM‘)+62.40750856543442 |
|---|
2009-10-04 10:33:49.000 |
Snowflake¶
Ergebnis¶
|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 |
Bekannte Probleme¶
1. Differences in time precision¶
Bei Operationen zwischen Datumswerten oder Zeitstempeln und Floats kann die Zeit von der von Oracle abweichen. Es gibt einen Aktionspunkt, um dieses Problem zu beheben.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
DATEDIFF UDF¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese UDF wird als Vorlage für alle Fälle verwendet, in denen eine Subtraktion zwischen einem DATE, TIMESTAMP, und einem beliebigen anderen Typ (außer Intervallen) stattfindet.
Benutzerdefinierte UDF-Überlastungen¶
DATEDIFF_UDF(date, date)¶
Parameter
FIRST_PARAM: Das erste
DATEder Operation.SECOND_PARAM:
DATE, das subtrahiert werden soll.
UDF¶
DATEDIFF_UDF(date, timestamp)¶
Parameter
FIRST_PARAM: Das erste
DATEder Operation.SECOND_PARAM:
TIMESTAMP, der subtrahiert werden soll.
UDF¶
DATEDIFF_UDF(date, integer)¶
Parameter
FIRST_PARAM: Das erste
DATEder Operation.SECOND_PARAM:
INTEGER, die subtrahiert werden soll.
UDF¶
DATEDIFF_UDF(timestamp, timestamp)¶
Parameter
FIRST_PARAM: Das erste
TIMESTAMPder Operation.SECOND_PARAM:
TIMESTAMP, der subtrahiert werden soll.
UDF¶
DATEDIFF_UDF(timestamp, date)¶
Parameter
FIRST_PARAM: Das erste
TIMESTAMPder Operation.SECOND_PARAM:
DATE, das subtrahiert werden soll.
UDF¶
DATEDIFF_UDF(timestamp, number)¶
Parameter
FIRST_PARAM: Das erste
TIMESTAMPder Operation.SECOND_PARAM:
NUMBER, die subtrahiert werden soll.
UDF¶
Verwendungsbeispiel¶
Bemerkung
Unbekannt ist eine Spalte, deren Typ nicht aufgelöst werden konnte. Es kann sich um einen Zeitstempel, ein Datum, eine Ganzzahl oder eine Zahl handeln.
Bemerkung
--disableDateAsTimestamp
Kennzeichen, das angibt, ob SYSDATE in CURRENT_DATE oder CURRENT_TIMESTAMP umgewandelt werden soll. Dies betrifft auch alle Spalten DATE, die in TIMESTAMP umgewandelt werden.
Oracle¶
Snowflake¶
Bekannte Probleme¶
1. Functional differences for timestamps¶
Manchmal kann der von UDF zurückgegebene Snowflake-Wert aufgrund der Zeit vom Oracle-Wert abweichen. Betrachten Sie das folgende Beispiel
Oracle¶
Ergebnis¶
ASTIMESTAMP-UNKNOWN |
|---|
4417 23:0:0.0 |
Snowflake¶
Ergebnis¶
PUBLIC.DATEDIFF_UDF( ASTIMESTAMP, UNKNOWN) |
|---|
4418 |
Zugehörige EWIs¶
SSC-EWI-OR0036: Bei Problemen mit der Auflösung von Typen verhält sich die arithmetische Operation zwischen Zeichenfolge und Datum möglicherweise nicht korrekt.
SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf.
JSON_VALUE UDF¶
Übersetzungsreferenz zur Konvertierung der JSON_VALUE-Funktion von Oracle in Snowflake
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Wie in der Oracle-Dokumentation beschrieben, verwendet diese Funktion den SQL/JSON Pfadausdruck, um Informationen über einen Teil einer JSON-Instanz abzufragen. Der Rückgabewert ist immer ein skalarer Wert, ansonsten gibt die Funktion standardmäßig NULL zurück.
Die JSON_VALUE_UDF ist eine Snowflake-Implementierung der JSONPath-Spezifikation, die eine modifizierte Version der ursprünglichen JavaScript-Implementierung von Stefan Goessner verwendet.
Beispielhafte Quellcode-Muster¶
Datenkonfiguration¶
Führen Sie diese Abfragen aus, um die Abfragen im Abschnitt JSON_VALUE Muster auszuführen.
Oracle¶
Snowflake¶
JSON_VALUE-Muster¶
Oracle¶
Ergebnisse¶
JSON-Pfad |
Abfrageergebnis |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Snowflake¶
Ergebnisse¶
JSON-Pfad |
Abfrageergebnis |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NOT SUPPORTED |
|
NOT SUPPORTED |
Bekannte Probleme¶
1. Returning Type Clause is not fully supported¶
Die einzigen unterstützten Typen bei der Übersetzung der Funktionalität der RETURNING TYPE-Klausel sind VARCHAR2, CLOB und NUMBER.
Bei allen anderen Typen, die von der ursprünglichen Funktion JSON_VALUE unterstützt werden, verhält sich JSON_VALUE_UDF so, als wäre keine RETURNING TYPE-Klausel angegeben worden.
Nicht unterstützte Typen:
DATETIMESTAMP [WITH TIME ZONE]SDO_GEOMETRYCUSTOM TYPE
2. ON MISMATCH Clause is not supported¶
Jetzt wird die ON MISMATCH-Klausel nicht mehr unterstützt und stattdessen wird eine EWI-Warnung eingefügt. Der übersetzte Code verhält sich also so, als wäre ursprünglich keine ON MISMATCH-Klausel angegeben worden.
3. Complex filters are not supported¶
Komplexe Filter mit mehr als einem Ausdruck geben null zurück, da sie nicht unterstützt werden.
Mit den gleichen Daten wie zuvor wird zum Beispiel dieser JSON-Pfad $.store.book[*]?(@.category == "reference").title unterstützt und gibt 'Sayings of the Century' zurück.
$.store.book[*]?(@.category == "reference" && @.price < 10).title wird jedoch null zurückgeben, da mehr als ein Ausdruck im Filter verwendet wird.
Zugehörige EWIs¶
SSC-EWI-0021: Nicht in Snowflake unterstützt.
JULIAN TO GREGORIAN DATE UDF¶
Beschreibung¶
Diese benutzerdefinierte Funktion (UDF) wird verwendet, um das Julianische Datumsformat in ein Gregorianisches Datumsformat umzuwandeln oder zu übertragen. Julianische Datumsangaben können in drei verschiedenen Formaten empfangen werden, wie JD Edwards World, Astronomie oder gewöhnliches Format.
Benutzerdefinierte UDF-Überlastungen¶
JULIAN_TO_GREGORIAN_DATE_UDF(julianDate, formatSelected)¶
Sie gibt eine Zeichenfolge mit dem gregorianischen Datumsformat YYYY-MM-DD zurück.
Parameter:¶
JulianDate: Das umzuwandelnde Julianische Datum. Es kann entweder CYYDDD (wobei C das Jahrhundert ist) oder YYYYDDD sein.
formatSelected: Es stellt das Format dar, in dem das Julianische Datum verarbeitet werden soll. Außerdem ist es ein CHAR und kann die folgenden Formate akzeptieren:
Verfügbares Format |
Buchstabendarstellung in CHAR |
Beschreibung |
|---|---|---|
Astronomie standardisiert |
‚J‘ |
Dies ist das Standardformat. Die Umwandlung basiert auf der erwarteten Konvertierung der US-Abteilung für Astronomische Anwendungen. Das julianischen Datumsformat für dies ist YYYYDDD. |
JD Edwards World |
‚E‘ |
Das in diesem Fall zu erwartende Julianische Datum sollte CYYDDD lauten (wobei C das Jahrhundert darstellt und operationalisiert wird, indem zu der entsprechenden Zahl 19 addiert wird). |
Ordinaldaten |
‚R‘ |
Die Ordinaldaten sind eine Anordnung von Zahlen, die ein prägnantes Datum darstellen. Das Format ist YYYYDDD und kann leicht gelesen werden, da der Jahresteil nicht veränderbar ist. |
UDF¶
Verwendungsbeispiel¶
Oracle¶
Ergebnis¶
TO_DATE(‚2020001‘, ‚J‘) |
|---|
18-JUN-18 |
Formatiertes Ergebnis¶
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¶
Ergebnis¶
JULIAN_TO_GREGORIAN_DATE_UDF(‚2020001‘, ‚J‘) |
|---|
„0818-06-18“ |
Bekannte Probleme¶
Jedes andere Format: Wenn das Julianische Datum in einem anderen, nicht unterstützten Format formatiert ist, kommt es zu Unterschieden in der Ausgabe.
Die Datumsbereiche von v. Chr. können aufgrund von nicht unterstützten Snowflake-Funktionen für Datumsangaben Inkonsistenzen aufweisen.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
MONTHS BETWEEN UDF [DEPRECATED]¶
Gefahr
Diese UDF ist veraltet. Die aktuelle Transformation für Oracle [MONTHS_BETWEEN()](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MONTHS_BETWEEN. html#GUID-E4A1AEC0-F5A0-4703-9CC8-4087EB889952) ist Snowflake MONTHS_BETWEEN().
Beschreibung¶
MONTHS_BETWEENgibt die Anzahl der Monate zwischen den Datumsangabendate1unddate2zurück. ([Oracle MONTHS_BETWEEN SQL Language Reference](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MONTHS_BETWEEN. html#GUID-E4A1AEC0-F5A0-4703-9CC8-4087EB889952))
Die Funktionen von Oracle MONTHS_BETWEEN und Snowflake MONTHS_BETWEEN weisen einige funktionale Unterschiede auf. Um diese Unterschiede zu minimieren und die Funktion von Oracle MONTHS_BETWEEN besser zu replizieren, haben wir eine benutzerdefinierte UDF hinzugefügt.
Benutzerdefinierte UDF-Überlastungen¶
MONTHS_BETWEEN_UDF(timestamp_ltz, timestamp_ltz)¶
Parameter
FIRST_DATE: Der erste
TIMESTAMP_LTZder Operation.SECOND_DATE: Der zweite
TIMESTAMP_LTZder Operation.
UDF¶
Oracle¶
Ergebnis¶
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¶
Ergebnis¶
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 |
Bekannte Probleme¶
1. Precision may differ from Oracle¶
Einige Ergebnisse können sich in der Anzahl der Dezimalstellen unterscheiden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
REGEXP LIKE UDF¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
REGEXP_LIKEführt einen Abgleich mit regulären Ausdrücken durch. Diese Bedingung wertet Zeichenfolgen anhand von Zeichen aus, die durch die Eingabezeichenfolge definiert sind. (Oracle Language Reference REGEXP_LIKE Condition)
Oracle REGEXP_LIKE und Snowflake REGEXP_LIKE haben einige funktionale Unterschiede. Um diese Unterschiede zu minimieren und die Funktion von Oracle REGEXP_LIKE besser zu replizieren, haben wir eine benutzerdefinierte UDF hinzugefügt. Die Hauptidee besteht darin, das Backslash-Symbol aus dem regulären Ausdruck zu entfernen, wenn es erforderlich ist. Dies sind die Sonderzeichen, die mit einem Backslash versehen werden müssen: 'd', 'D', 'w', 'W', 's', 'S', 'A', 'Z', 'n'. Außerdem muss der Rückverweisausdruck (entspricht demselben Text wie der zuletzt von der Erfassungsgruppe „angegebene Zahl“ übereinstimmende Text) mit einem Escapezeichen werden.
Benutzerdefinierte UDF-Überlastungen¶
REGEXP_LIKE_UDF(string, string)¶
Parameter¶
COL: ist der Zeichenausdruck, der als Suchwert dient.
PATTERN: ist der reguläre Ausdruck.
UDF¶
Oracle¶
Snowflake¶
REGEXP_LIKE_UDF(string, string, string)¶
Parameter¶
COL: ist der Zeichenausdruck, der als Suchwert dient.
PATTERN: ist der reguläre Ausdruck.
MATCHPARAM: ist ein Zeichenausdruck, mit dem Sie das Standardverhalten der Bedingung ändern können. In der folgenden Tabelle finden Sie die Oracle-Zeichen mit ihrer Beschreibung und ihrer Entsprechung in der UDF.
Abgleichsparameter |
Beschreibung |
UDF-Äquivalent |
|---|---|---|
‚i‘ |
Gibt Übereinstimmungen ohne Berücksichtigung der Groß-/Kleinschreibung an, auch wenn die ermittelte Sortierung der Bedingung zwischen Groß- und Kleinschreibung unterscheidet. |
‚i‘ |
‚c‘ |
Gibt Übereinstimmungen an, bei denen zwischen Groß-/Kleinschreibung und Akzenten unterschieden wird, auch wenn die ermittelte Sortierung der Bedingung nicht zwischen Groß- und Kleinschreibung und Akzenten unterscheidet. |
Hat kein Äquivalent. Wird aus dem Parameter entfernt. |
‚n‘ |
Erlaubt, dass der Punkt (.), der das Platzhalterzeichen für jedes Zeichen ist, mit dem Zeilenumbruchzeichen übereinstimmt. Wenn Sie diesen Parameter weglassen, stimmt der Punkt nicht mit dem Zeilenumbruchzeichen überein. |
‚s‘ |
‚m‘ |
Behandelt die Quellzeichenfolge als mehrere Zeilen. Oracle interpretiert |
‚m‘ |
‚x‘ |
Ignoriert Leerzeichen. Standardmäßig passen sich Leerzeichen selbst an. |
Hat kein Äquivalent. Wird aus dem Parameter entfernt. |
UDF¶
Oracle¶
Snowflake¶
Bekannte Probleme¶
1. Der UDF-Abgleichsparameter verhält sich möglicherweise nicht wie erwartet¶
Da nicht alle Zeichen, die im Oracle-Abgleichsparameter verfügbar sind, ihre Entsprechung in der benutzerdefinierten Funktion haben, kann das Abfrageergebnis einige funktionale Unterschiede im Vergleich zu Oracle aufweisen.
2. UDF pattern parameter does not allow only ‚\‘ as a regular expression¶
Wenn der als Musterparameter verwendete reguläre Ausdruck nur „\“ lautet, wird eine Ausnahme wie folgt ausgelöst: JavaScript Ausführungsfehler: Unbekannt SyntaxError: Ungültiger regulärer Ausdruck: //: \ am Ende des Musters in REGEXP_LIKE_UDF bei ‚return COL.match(new RegExp(PATTERN));‘ position 17 stackstrace: REGEXP_LIKE_UDF
TIMESTAMP DIFF UDF¶
Beschreibung¶
Snowflake does not support the addition operation between TIMESTAMP data types with the - operand. To replicate this functionality, we have added a custom UDF.
Benutzerdefinierte UDF-Überlastungen¶
TIMESTAMP_DIFF_UDF(timestamp, timestamp)¶
Parameter
LEFT_TS: Das erste
TIMESTAMPder Operation.RIGHT_TS:
TIMESTAMPmuss hinzugefügt werden.
UDF¶
Oracle¶
Ergebnis¶
COL1-COL2 |
|---|
1461 12:0:0.0 |
-1460 12:0:0.0 |
30056 7:10:4.0 |
36172 23:10:0.0 |
Snowflake¶
Ergebnis¶
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 |
Bekannte Probleme¶
1. TIMESTAMP format may differ from Oracle¶
Das Format TIMESTAMP kann von Oracle abweichen. Bitte beachten Sie die Einstellung TIMESTAMP_OUTPUT_FORMAT, wenn Sie mit TIMESTAMP-Datentypen arbeiten.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
TRUNC (Datum) UDF¶
Beschreibung¶
Die Funktion
TRUNC(Datum) gibtdatezurück, wobei der Zeitanteil des Tages auf die durch das Formatmodellfmtangegebene Einheit gekürzt wird. (Oracle TRUNC(date) SQL Language Reference)
Oracle TRUNC- und Snowflake TRUNC-Funktion mit Datumsargumenten haben einige funktionale Unterschiede.
TRUNC_UDF-Hilfsfunktion wird hinzugefügt, um die folgenden Fälle zu behandeln:
1. Das Format wird von Snowflake nicht unterstützt.
2. Das Format existiert in Snowflake, funktioniert aber anders.
3. Das Tool kann den Datentyp des ersten Arguments nicht bestimmen.
4. Das Format wird als Spalte oder Ausdruck und nicht als Literal angegeben.
Benutzerdefinierte UDF-Überlastungen¶
TRUNC_UDF(date)¶
Es wendet ein explizites DATE Umwandeln auf die Eingabe Zeitstempel an.
Parameter
INPUT: Der Zeitstempel mit Zeitzone (TIMESTAMP_LTZ), der gekürzt werden muss.
Warnung
Der Standardparameter für die UDF ist TIMESTAMP_LTZ. Möglicherweise muss er in TIMESTAMP_TZ oder TIMESTAMP_NTZ geändert werden, damit er mit dem vom Benutzer verwendeten Standardwert TIMESTAMP übereinstimmt.
UDF¶
Oracle¶
Ergebnis¶
Date |
|---|
1996-03-20 00:00:00.000 |
Snowflake¶
Ergebnis¶
DATE |
|---|
1996-03-20 |
TRUNC_UDF(date, fmt)¶
Erstellt manuell ein neues Datum mit der Funktion DATE_FROM_PARTS(), abhängig von der verwendeten Formatkategorie.
Parameter
DATE_TO\_TRUNC: Der Zeitstempel mit Zeitzone (TIMESTAMP_LTZ), der gekürzt werden muss.
DATE_FMT: Das Datumsformat als VARCHAR. Dieselben Formate, die auch in Oracle unterstützt werden.
Warnung
Der Standardparameter für die UDF ist TIMESTAMP_LTZ. Möglicherweise muss er in TIMESTAMP_TZ oder TIMESTAMP_NTZ geändert werden, damit er mit dem vom Benutzer verwendeten Standardwert TIMESTAMP übereinstimmt.
UDF¶
TRUNC Format-Szenarien¶
Warnung
Das Ergebnisformat hängt von den für die Datenbank konfigurierten DateTime-Ausgabeformaten ab.
1. Natively supported formats¶
Oracle¶
Ergebnis¶
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¶
Ergebnis¶
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. Formats mapped to another format¶
Oracle¶
Ergebnis¶
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¶
Ergebnis¶
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. Day formats¶
Oracle¶
Ergebnis¶
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¶
Ergebnis¶
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. Unsupported formats¶
Oracle¶
Ergebnis¶
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¶
Ergebnis¶
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 |
Bemerkung
Wenn die TRUNC-Funktion mit einem nicht unterstützten Format oder einem Parameter verwendet wird, der nicht von SnowConvert AI verarbeitet werden kann. Um Probleme zu vermeiden, wird das Format durch ein gültiges Format ersetzt oder TRUNC_UDF wird hinzugefügt.
Bekannte Probleme¶
1. Oracle DATE contains TIMESTAMP¶
Berücksichtigen Sie, dass die DATE-Funktion von Oracle einen leeren TIMESTAMP (00:00:00,000) enthält, während dies bei der DATE-Funktion von Snowflake nicht der Fall ist.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
TRUNC (Zahl) UDF¶
Beschreibung¶
Die Funktion
TRUNC(number) gibtn1gekürzt aufn2Nachkommastellen zurück. Wennn2weggelassen wird, dann wirdn1auf 0 Stellen gekürzt.n2kann negativ sein, umn2Ziffern links vom Dezimalpunkt zu kürzen (auf Null zu setzen). (Oracle TRUNC(number) SQL Language Reference)
TRUNC\UDF für numerische Werte wird hinzugefügt, um Fälle zu behandeln , in denen die erste Spalte einen nicht erkannten Datentyp hat.
Beispiel:
Wenn die Definition von column1 dem Tool nicht zur Verfügung gestellt wurde. Dann wird TRUNC_UDF hinzugefügt und zur Ausführungszeit wird die Überladung von TRUNC_UDF den Fall behandeln, wenn es sich um einen numerischen oder einen Datumstyp handelt.
Weitere Informationen finden Sie unter TRUNC (DATE).
Die folgenden Abschnitte liefern den Beweis, dass TRUNC_UDF perfekt mit numerischen Werten umgehen kann.
Benutzerdefinierte UDF-Überlastungen¶
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.
Parameter
INPUT: Die
NUMBER, die gekürzt werden muss.
UDF¶
Oracle¶
Ergebnis¶
TRUNC(1.000001) |
TRUNC(15.79) |
TRUNC(-975.975) |
TRUNC(135.135) |
|---|---|---|---|
1 |
15 |
-975 |
135 |
Snowflake¶
Ergebnis¶
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.
Parameter
INPUT: Die
NUMBER, die gekürzt werden muss.SCALE: Stellt die Anzahl der Ziffern dar, die die Ausgabe nach dem Dezimalpunkt enthält.
UDF¶
Oracle¶
Ergebnis¶
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¶
Ergebnis¶
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 |
Bekannte Probleme¶
Es wurden keine Probleme gefunden.
Zugehörige EWIs¶
Keine zugehörigen EWIs.
SnowConvert AI – Oracle – INTERVAL UDFs¶
Erforderlicher Code zur Ausführung von INTERVAL UDFs¶
To run any of the interval UDFs, it is necessary to run the following code before:
DATEADD UDF INTERVAL¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese UDF wird verwendet, um Operationen mit Intervallen wie:
INTERVAL + DATE
INTERVAL + TIMESTAMP
DATE + INTERVAL
DATE + TIMESTAMP
INTERVAL + UNKNOWN
UNKNOWN + INTERVAL
Bemerkung
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.
Benutzerdefinierte UDF-Überlastungen¶
DATEADD_UDF(string, date)¶
Parameter
INTERVAL_VALUE: Intervall
Stringder Operation.D: Das
DATE, wo das Intervall hinzugefügt wird.
UDF¶
DATEADD_UDF(date, string)¶
Parameter
D: Das
DATE, wo das Intervall hinzugefügt wird.INTERVAL_VALUE: Intervall
Stringder Operation.
UDF¶
DATEADD_UDF(string, timestamp)¶
Parameter
INTERVAL_VALUE: Intervall
Stringder Operation.D: Das
TIMESTAMP, wo das Intervall hinzugefügt wird.
UDF¶
DATEADD_UDF(timestamp, string)¶
Parameter
D: Das
TIMESTAMP, wo das Intervall hinzugefügt wird.INTERVAL_VALUE: Intervall
Stringder Operation.
UDF¶
Verwendungsbeispiel¶
Bemerkung
--disableDateAsTimestamp
Kennzeichen, das angibt, ob SYSDATE in CURRENT_DATE oder CURRENT_TIMESTAMP umgewandelt werden soll. Dies betrifft auch alle Spalten DATE, die in TIMESTAMP umgewandelt werden.
Oracle¶
Ergebnisse¶
Snowflake¶
Bemerkung
Diese Konfiguration wurde in Snowflake verwendet
Ergebnisse¶
Bekannte Probleme¶
1. INTERVAL + INTERVAL Operation is not supported¶
Snowflake unterstützt keine INTERVAL + INTERVAL Operationen.
Zugehörige EWIs¶
SSC-EWI-OR0036: Bei Problemen mit der Auflösung von Typen verhält sich die arithmetische Operation zwischen Zeichenfolge und Datum möglicherweise nicht korrekt.
SSC-EWI-OR0095: Operation zwischen Intervalltyp und Datumstyp wird nicht unterstützt.
SSC-FDM-0007: Element mit fehlenden Abhängigkeiten.
SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf.
DATEDIFF UDF INTERVAL¶
Bemerkung
Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.
Beschreibung¶
Diese UDF wird verwendet, um Operationen mit Intervallen wie:
INTERVAL - UNKNOWN
UNKNOWN - INTERVAL
DATE - INTERVAL
TIMESTAMP - INTERVAL
Bemerkung
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.
Benutzerdefinierte UDF-Überlastungen¶
DATEADD_DDIF(string, date)¶
Parameter
INTERVAL_VALUE: Intervall
Stringder Operation.D: Das
DATE, von dem das Intervall subtrahiert werden soll.
UDF¶
DATEADD_DIFF(date, string)¶
Parameter
D: Das
DATE, von dem das Intervall subtrahiert werden soll.INTERVAL_VALUE: Intervall
Stringder Operation.
UDF¶
DATEADD_DIFF(string, timestamp)¶
Parameter
INTERVAL_VALUE: Intervall
Stringder Operation.D: Das
TIMESTAMP, von dem das Intervall subtrahiert werden soll.
UDF¶
DATEADD_DIFF(timestamp, string)¶
Parameter
D: Das
TIMESTAMP, von dem das Intervall subtrahiert werden soll.INTERVAL_VALUE: Intervall
Stringder Operation.
UDF¶
Verwendungsbeispiel¶
Bemerkung
--disableDateAsTimestamp
Kennzeichen, das angibt, ob SYSDATE in CURRENT_DATE oder CURRENT_TIMESTAMP umgewandelt werden soll. Dies betrifft auch alle Spalten DATE, die in TIMESTAMP umgewandelt werden.
Oracle¶
Ergebnis¶
Snowflake¶
Bemerkung
Diese Konfiguration wurde in Snowflake verwendet
Ergebnis¶
Bekannte Probleme¶
1. INTERVAL - INTERVAL Operation is not supported¶
Snowflake unterstützt keine INTERVAL - INTERVAL Operationen.
Zugehörige EWIs¶
SSC-EWI-OR0036: Bei Problemen mit der Auflösung von Typen verhält sich die arithmetische Operation zwischen Zeichenfolge und Datum möglicherweise nicht korrekt.
SSC-EWI-OR0095: Operation zwischen Intervalltyp und Datumstyp wird nicht unterstützt.
SSC-FDM-0007: Element mit fehlenden Abhängigkeiten.
SSC-FDM-OR0042: In Zeitstempel transformierter Datumstyp weist ein anderes Verhalten auf.