SnowConvert AI – Teradata – Integrierte Funktionen

Diese Seite bietet eine Beschreibung der Übersetzung der integrierten Funktionen von Teradata in Snowflake

Bemerkung

Auf dieser Seite werden nur die Funktionen aufgelistet, die bereits von SnowConvert AI transformiert wurden. Wenn eine Funktion aus der Teradata-Dokumentation dort nicht aufgeführt ist, dann sollte sie als nicht unterstützt betrachtet werden.

Weitere Informationen zu integrierten Funktionen und ihren Snowflake-Äquivalenten finden Sie auch unter Allgemeine integrierte Funktionen.

Bemerkung

Einige Teradata-Funktionen haben kein direktes Äquivalent in Snowflake, sodass sie in ein funktionales UDF-Äquivalent umgewandelt werden. Diese können leicht durch das _UDF-Postfix im Namen der Funktion erkannt werden. Weitere Informationen zu den UDFs, die SnowConvert AI verwendet, finden Sie in diesem Git-Repository.

Aggregatfunktionen

Teradata

Snowflake

Hinweis

AVG

AVG

CORR

CORR

COUNT

COUNT

COVAR_POP

COVAR_POP

COVAR_SAMP

COVAR_SAMP

GROUPING

GROUPING

KURTOSIS

KURTOSIS

MAXIMUM

MAX

MAX

MINIMUM

MIN

MIN

PIVOT

PIVOT

Prüfen Sie PIVOT.

REGR_AVGX

REGR_AVGX

REGR_AVGY

REGR_AVGY

REGR_COUNT

REGR_COUNT

REGR_INTERCEPT

REGR_INTERCEPT

REGR_R2

REGR_R2

REGR_SLOPE

REGR_SLOPE

REGR_SXX

REGR_SXX

REGR_SXY

REGR_SXY

REGR_SYY

REGR_SYY

SKEW

SKEW

STDDEV_POP

STDDEV_POP

STDDEV_SAMP

STDDEV_SAMP

SUM

SUM

UNPIVOT

UNPIVOT

<p>Unpivot mit mehreren Funktionen<br>nicht in Snowflake unterstützt</p>

VAR_POP

VAR_POP

VAR_SAMP

VAR_SAMP

Arithmetische, trigonometrische, hyperbolische Operatoren/Funktionen

Teradata

Snowflake

Hinweis

ABS

ABS

CEILING

CEIL

DEGREES

DEGREES

EXP

EXP

FLOOR

FLOOR

HYPERBOLIC

ACOSH

ASINH

ATANH

COSH

SINH

TANH

HYPERBOLIC

ACOSH

ASINH

ATANH

COSH

SINH

TANH

LOG

LOG

LN

LN

MOD

MOD

NULLIFZERO(Parameter)

CASE WHEN param=0 THEN null ELSE param END

POWER

POWER

RANDOM

RANDOM

RADIANS

RADIANS

ROUND

ROUND

SIGN

SIGN

SQRT

SQRT

TRUNC

TRUNC_UDF

TRIGONOMETRIC

ACOS

ASIN

ATAN

ATAN2

COS

SIN

TAN

TRIGONOMETRIC

ACOS

ASIN

ATAN

ATAN2

COS

SIN

TAN

ZEROIFNULL

ZEROIFNULL

Attribut-Funktionen

Teradata

Snowflake

Hinweis

BIT_LENGTH

BIT_LENGTH

BYTE

BYTES

LENGTH

CHAR

CHARS

CHARACTERS

LEN

CHAR_LENGTH

CHARACTER_LENGTH

LEN

MCHARACTERS

LENGTH

OCTECT_LENGTH

OCTECT_LENGTH

Bit/Byte Manipulationsfunktionen

Teradata

Snowflake

Hinweis

BITAND

BITAND

BITNOT

BITNOT

BITOR

BITOR

BITXOR

BITXOR

GETBIT

GETBIT

Integriert (Systemfunktionen)

Teradata

Snowflake

Hinweis

ACCOUNT

CURRENT_ACCOUNT

CURRENT_DATE

CURDATE

CURRENT_DATE

CURRENT_ROLE

CURRENT_ROLE

CURRENT_TIME
CURTIME

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP

DATABASE

CURRENT_DATABASE

DATE

CURRENT_DATE

NOW

CURRENT_TIMESTAMP

PROFILE

CURRENT_ROLE

Weitere Informationen zu dieser Transformation finden Sie unter SSC-EWI-TD0068.

SESSION

CURRENT_SESSION

TIME

CURRENT_TIME

USER

CURRENT_USER

Business-Kalender

Teradata

Snowflake

Hinweis

DAYNUMBER_OF_MONTH(DatetimeValue, ‚COMPATIBLE‘)

DAYOFMONTH

DAYNUMBER_OF_MONTH(DatetimeValue, ‚ISO‘)

DAYNUMBER_OF_MONTH_ISO_UDF

DAYNUMBER_OF_MONTH(DatetimeValue, ‚TERADATA‘)

DAYOFMONTH

DAYNUMBER_OF_WEEK(DatetimeValue, ‚ISO‘)

DAYOFWEEKISO

DAYNUMBER_OF_WEEK(DatetimeValue, ‚COMPATIBLE‘)

DAY_OF_WEEK_COMPATIBLE_UDF

DAYNUMBER_OF_WEEK(DatetimeValue, ‚TERADATA‘)
DAYNUMBER_OF_WEEK(DatetimeValue)

TD_DAY_OF_WEEK_UDF

DAYNUMBER_OF_YEAR(DatetimeValue, ‚ISO‘)

PUBLIC.DAY_OF_YEAR_ISO_UDF

DAYNUMBER_OF\_YEAR(DatetimeValue)

DAYOFYEAR

QUARTERNUMBER_OF_YEAR

QUARTER

TD_SUNDAY(DateTimeValue)

PREVIOUS_DAY(DateTimeValue, ‚Sunday‘)

WEEKNUMBER_OF_MONTH

WEEKNUMBER_OF_MONTH_UDF

WEEKNUMBER_OF\_QUARTER(dateTimeValue)

WEEKNUMBER_OF_QUARTER_UDF

WEEKNUMBER_OF_QUARTER(dateTimeValue, ‚ISO‘)

WEEKNUMBER_OF_QUARTER_ISO_UDF

WEEKNUMBER_OF_QUARTER(dateTimeValue, ‚COMPATIBLE‘)

WEEKNUMBER_OF_QUARTER_COMPATIBLE_UDF

WEEKNUMBER_OF_YEAR(DateTimeValue, ‚ISO‘)

WEEKISO

YEARNUMBER_OF_CALENDAR(DATETIMEVALUE, ‚COMPATIBLE‘)

YEAR

YEARNUMBER_OF_CALENDAR(DATETIMEVALUE, ‚ISO‘)

YEAROFWEEKISO

Kalender-Funktionen

Teradata

Snowflake

Hinweis

DAYNUMBER_OF\_WEEK(DatetimeValue)

TD_DAY_OF_WEEK_UDF

DAYNUMBER_OF_WEEK(DatetimeValue, ‚COMPATIBLE‘)

DAY_OF_WEEK_COMPATIBLE_UDF

QuarterNumber_Of_Year(DatetimeValue, ‚ISO‘)

QUARTER_OF_YEAR_ISO_UDF(DatetimeValue)

TD_DAY_OF_CALENDAR

TD_DAY_OF_CALENDAR_UDF

TD_DAY_OF_MONTH
DAYOFMONTH

DAYOFMONTH

TD_DAY_OF_WEEK
DAYOFWEEK

TD_DAY_OF_WEEK_UDF

TD_DAY_OF_YEAR

DAYOFYEAR

TD_MONTH_OF_CALENDAR(DateTimeValue)
MONTH_CALENDAR(DateTimeValue)

TD_MONTH_OF_CALENDAR_UDF(DateTimeValue)

TD_WEEK_OF_CALENDAR(DateTimeValue)
WEEK_OF_CALENDAR(DateTimeValue)

TD_WEEK_OF_CALENDAR_UDF(DateTimeValue)

TD_WEEK_OF_YEAR

WEEK_OF_YEAR_UDF

TD_YEAR\_BEGIN(DateTimeValue)

YEAR_BEGIN\_UDF(DateTimeValue)

TD_YEAR_BEGIN(DateTimeValue, ‚ISO‘)

YEAR_BEGIN_ISO_UDF(DateTimeValue)

TD_YEAR\_END(DateTimeValue)

YEAR_END\_UDF(DateTimeValue)

TD_YEAR_END(DateTimeValue, ‚ISO‘)

YEAR_END_ISO_UDF(DateTimeValue)

WEEKNUMBER_OF\_MONTH(DateTimeValue)

WEEKNUMBER_OF_MONTH_UDF(DateTimeValue)

WEEKNUMBER_OF\_QUARTER(DateTimeValue)

WEEKNUMBER_OF_QUARTER_UDF(DateTimeValue)

WEEKNUMBER_OF_QUARTER(DateTimeValue, ‚ISO‘)

WEEKNUMBER_OF_QUARTER_ISO_UDF(DateTimeValue)

WEEKNUMBER_OF_QUARTER(DateTimeValue, ‚COMPATIBLE‘)

WEEKNUMBER_OF_QUARTER_COMPATIBLE_UDF(DateTimeValue)

WEEKNUMBER_OF\_YEAR(DateTimeValue)

WEEK_OF_YEAR_UDF(DateTimeValue)

WEEKNUMBER_OF_YEAR(DateTimeValue, ‚COMPATIBLE‘)

WEEK_OF_YEAR_COMPATIBLE_UDF(DateTimeValue)

Case-Funktionen

Teradata

Snowflake

Hinweis

COALESCE

COALESCE

Prüfen Sie Coalesce.

NULLIF

NULLIF

Vergleichsfunktionen

Teradata

Snowflake

Hinweis

DECODE

DECODE

GREATEST

GREATEST

LEAST

LEAST

Datentypkonvertierung

Teradata

Snowflake

Hinweis

CAST

CAST

CAST(DatetimeValue AS INT)

DATE_TO_INT_UDF

CAST (VarcharValue AS INTERVAL)

INTERVAL_UDF

Prüfen Sie In INTERVAL-Datentyp umwandeln

TRYCAST

TRY_CAST

FROM_BYTES

TO_NUMBER
TO_BINARY

FROM_BYTES mit dem Parameter ASCII wird in Snowflake nicht unterstützt.

Datentypkonvertierungsfunktionen

Teradata

Snowflake

Hinweis

TO_BYTES(Input, ‚Base10‘)

INT2HEX_UDF(Input)

TO_NUMBER

TO_NUMBER

TO_CHAR

TO_CHAR oder gleichwertiger Ausdruck

Prüfen Sie TO_CHAR.

TO_DATE

TO_DATE

TO_DATE(input, ‚YYYYDDD‘)

JULIAN_TO_DATE_UDF

DateTime und Intervallfunktionen

Teradata

Snowflake

Hinweis

ADD_MONTHS

ADD_MONTHS

EXTRACT

EXTRACT

LAST_DAY

LAST_DAY

MONTH

MONTH

MONTHS_BETWEEN

MONTHS_BETWEEN_UDF

NEXT_DAY

NEXT_DAY

OADD_MONTHS

ADD_MONTHS

ROUND(Numerisch)

ROUND

ROUND(date)

ROUND_DATE_UDF

TRUNC(date)

TRUNC_UDF

YEAR

YEAR

Hash-Funktionen

Teradata

Snowflake

Hinweis

HASH_MD5

MD5

HASHAMP

HASHBACKAM

HASHBUCKET

HASHROW

Nicht unterstützt

Prüfen Sie die Hinweise zu den Architekturunterschieden zwischen Teradata und Snowflake

JSON-Funktionen

Teradata

Snowflake

Hinweis

NEW JSON

TO_JSON(PARSE_JSON() )

Prüfen Sie NEW JSON

JSON_CHECK

CHECK_JSON

Prüfen Sie JSON_CHECK

JSON_TABLE

Äquivalente Abfrage

Prüfen Sie JSON_TABLE

JSONExtract

JSONExtractValue
JSONExtractLargeValue

JSON_EXTRACT_UDF

Prüfen Sie JSON_EXTRACT

Null-Handling-Funktionen

Teradata

Snowflake

Hinweis

NVL

NVL

NVL2

NVL2

Geordnete Analytische/Fenster Aggregat-Funktionen

Teradata

Snowflake

Hinweis

CSUM(col1, col2)

SUM(col_1) OVER (PARTITION BY null ORDER BY col_2 ROWS UNBOUNDED PRECEDING)

CUME_DIST

CUME_DIST

DENSE_RANK

DENSE_RANK

FIRST_VALUE

FIRST_VALUE

LAG

LAG

LAST_VALUE

LAST_VALUE

LEAD

LEAD

MAVG(csales, 2, cdate, csales)

AVG(csales) OVER (ORDER BY cdate, csales ROWS 1 PRECEDING)

MEDIAN

MEDIAN

MSUM(csales, 2, cdate, csales)

SUM(csales) OVER(ORDER BY cdate, csales ROWS 1 PRECEDING)

PERCENT_RANK

PERCENT_RANK

PERCENTILE_CONT

PERCENTILE_CONT

PERCENTILE_DISC

PERCENTILE_DISC

QUANTILE

QUANTILE

RANK

RANK

ROW_NUMBER

ROW_NUMBER

Periodenfunktionen und Operatoren

Teradata

Snowflake

Hinweis

BEGIN

PERIOD_BEGIN_UDF

END

PERIOD_END_UDF

INTERVAL

TIMESTAMPDIFF

LAST

PERIOD_LAST_UDF

LDIFF

PERIOD_LDIFF_UDF

OVERLAPS

PUBLIC.PERIOD_OVERLAPS_UDF

PERIOD

PERIOD_UDF

PERIOD(datetimeValue, UNTIL_CHANGED)

PERIOD(datetimeValue, UNTIL_CLOSED)

PERIOD_UDF(datetimeValue, ‚9999-12-31 23:59:59,999999‘)

Siehe Hinweise zu Endkonstante Konstanten

RDIFF

PERIOD_RDIFF_UDF

Abfrageband-Funktionen

Teradata

Snowflake

Hinweis

GETQUERYBANDVALUE

GETQUERYBANDVALUE_UDF

Prüfen Sie GETQUERYBANDVALUE

Regex-Funktionen

Teradata

Snowflake

Hinweis

REGEXP_INSTR

REGEXP_INSTR

Prüfen Sie Regex-Funktionen

REGEXP_REPLACE

REGEXP_REPLACE

Prüfen Sie Regex-Funktionen

REGEXP_SIMILAR

REGEXP_LIKE

Prüfen Sie Regex-Funktionen

REGEXP_SUBSTR

REGEXP_SUBSTR

Prüfen Sie Regex-Funktionen

Zeichenfolge-Operatoren und -Funktionen

Teradata

Snowflake

Hinweis

ASCII

ASCII

CHAR2HEXINT

CHAR2HEXINT_UDF

CHR

CHR/CHAR

CHAR_LENGTH

LEN

CONCAT

CONCAT

EDITDISTANCE

EDITDISTANCE

INDEX

CHARINDEX

Überprüfen Sie die Hinweise zu implicit-conversion

INITCAP

INITCAP

INSTR

REGEXP_INSTR

INSTR(StringValue, StringValue,NumericNegativeValue, NumericValue)

INSTR_UDF(StringValue, StringValue,NumericNegativeValue, NumericValue)

LEFT

LEFT

LENGTH

LENGTH

LOWER

LOWER

LPAD

LPAD

LTRIM

LTRIM

OREPLACE

REPLACE

OTRANSLATE

TRANSLATE

POSITION

POSITION

Überprüfen Sie die Hinweise zu implicit-conversion

REVERSE

REVERSE

RIGHT

RIGHT

RPAD

RPAD

RTRIM

RTRIM

SOUNDEX

SOUNDEX_P123

STRTOK

STRTOK

STRTOK_SPLIT_TO_TABLE

STRTOK_SPLIT_TO_TABLE

Prüfen Sie Strtok_split_to_table

SUBSTRING

SUBSTR/SUBSTR_UDF

Prüfen Sie Teilzeichenfolge

TRANSLATE_CHK

TRANSLATE_CHK_UDF

TRIM(LEADING ‚0‘ FROMaTABLE)

LTRIM(aTABLE, ‚0‘)

TRIM(TRAILING ‚0‘ FROMaTABLE)

RTRIM(aTABLE, ‚0‘)

TRIM(BOTH ‚0‘ FROMaTABLE)

TRIM(aTABLE, ‚0‘)

TRIM(CAST(numericValue AS FORMAT ‚999‘))

LPAD(numericValue, 3, 0)

UPPER

UPPER

St_Point-Funktionen

Teradata

Snowflake

Hinweis

ST_SPHERICALDISTANCE

HAVERSINE
ST_DISTANCE

Siehe St_Point-Funktionen

Tabellen-Operatoren

Teradata

Snowflake

Hinweis

TD_UNPIVOT

Äquivalente Abfrage

Prüfen Sie Td_unpivot

XML-Funktionen

Teradata

Snowflake

Hinweis

XMLAGG

LISTAGG

Prüfen Sie Xmlagg

XMLQUERY

Nicht unterstützt

Erweiterbarkeits-UDFs

Dieser Abschnitt enthält UDFs und andere Erweiterbarkeitsfunktionen, die von Teradata nicht als in das System integrierte Funktionen angeboten werden, aber von SnowConvert AI transformiert werden.

Teradata

Snowflake

Hinweis

CHKNUM

CHKNUM_UDF

Besuchen Sie diese UDF-Download-Seite

Anmerkungen

Architekturunterschiede zwischen Teradata und Snowflake

Teradata verfügt über eine Shared-Nothing-Architektur mit Access Module Processors (AMP), bei der jeder AMP seinen eigenen Anteil am Plattenspeicher verwaltet und bei Abfragen über Hashing zugegriffen wird. Um die Vorteile der Parallelität zu nutzen, sollten die gespeicherten Informationen gleichmäßig auf AMPs verteilt werden. Zu diesem Zweck bietet Teradata eine Gruppe von Hashwert-Funktionen an, mit denen Sie feststellen können, wie gut die aktuellen Primärindizes sind.

Die Snowflake-Architektur hingegen ist anders. Sie verwaltet die Speicherung der Daten selbst, so dass sich die Benutzer nicht um die Optimierung der Datenverteilung kümmern müssen.

Endkonstanten (UNTIL_CHANGED und UNTIL_CLOSED)

Sowohl UNTIL_CHANGED als auch UNTIL_CLOSED sind Teradata-Konstanten, die eine undefinierte Endgrenze für Perioden darstellen. Intern werden diese Konstanten als der maximale Wert dargestellt, den ein Zeitstempel haben kann, z. B. ‚9999-12-31 23:59:59,999999‘. Während der Migration der Funktion PERIOD wird die Endgrenze überprüft, um festzustellen, ob sie eine dieser Konstanten ist, und sie gegebenenfalls durch Varchar mit dem Wert ‚9999-12-31 23:59:59.999999‘ zu ersetzen. Ist dies der Fall, wandelt Snowflake den Varchar-Wert je nach Typ der Anfangsgrenze beim Aufruf von PERIOD___UDF aufruft.

Implizite Konvertierung

Einige Teradata-Zeichenfolgenfunktionen wie INDEX oder POSITION akzeptieren Nicht-Zeichenfolgen-Datentypen und konvertieren sie implizit in eine Zeichenfolge. Dies kann zu Inkonsistenzen in den Ergebnissen dieser Funktionen zwischen Teradata und Snowflake führen. Zum Beispiel der folgende Teradata-Code:

 SELECT INDEX(35, '5');
Copy

Das Ergebnis ist 4, während die CHARINDEX-Entsprechung in Snowflake:

 SELECT CHARINDEX('5', 35);
Copy

2 ist. Dies geschieht, weil Teradata seine eigenen Standardformate hat, die bei der impliziten Konvertierung verwendet werden. Im obigen Beispiel interpretiert Teradata die numerische Konstante 35 als BYTEINT und verwendet BYTEINT Standardformat'-999' für die implizite Konvertierung in eine Zeichenfolge, wodurch der konvertierte Wert ' 35' lautet. Andererseits verwendet Snowflake seine eigenen Standardformate, was zu Inkonsistenzen im Ergebnis führt.

Um dieses Problem zu lösen, werden die folgenden Änderungen an diesen Funktionsparametern vorgenommen:

  • Wenn der Parameter not eine Umwandlung mit Format hat, wird stattdessen eine Funktion von SnowflakeTO_VARCHARmit dem Standard-Teradata-Format-Äquivalent in Snowflake hinzugefügt.

  • Wenn der Parameter eine Formatumwandlung hat, dann wird das Format in sein Snowflake-Äquivalent konvertiert und die FunktionTO_VARCHARhinzugefügt.

    • Als Randbemerkung: Teradata ignoriert das Vorzeichen einer Zahl, wenn es nicht explizit in ein Format eingefügt wird, während Snowflake immer Leerzeichen hinzufügt, um das Vorzeichen einzufügen, auch wenn es nicht angegeben wurde. In diesen Fällen wird geprüft, ob das Vorzeichen angegeben wurde und es aus der Snowflake-Zeichenfolge entfernt, falls es nicht angegeben wurde.

Nach diesen Änderungen würde der Code folgendermaßen aussehen:

 SELECT CHARINDEX( '5', TO_VARCHAR(35, 'MI999'));
Copy

Das Ergebnis ist 4, das gleiche wie der Teradata-Code.

Bekannte Probleme

Es wurden keine Probleme gefunden.

COALESCE

Beschreibung

Die Coalesce-Funktion wird verwendet, um das erste Nicht-Null-Element in einer Liste zurückzugeben. Weitere Informationen dazu finden Sie unter COALESCE.

COALESCE(element_1, element_2 [, element_3, ..., element_n])
Copy

Sowohl die COALESCE-Funktionen von Teradata als auch von Snowflake erlauben die Kombination von numerischen Parametern mit Zeichenfolgen- und Datumsparametern mit Zeitstempeln. Sie behandeln diese beiden Fälle jedoch unterschiedlich:

  • Numerische Parameter zusammen mit Zeichenfolgen-Parametern: Teradata konvertiert alle numerischen Parameter in Varchar, während Snowflake das Gegenteil tut

  • Zeitstempel zusammen mit Datumsparametern: Teradata konvertiert alle Zeitstempel in ein Datum, während Snowflake das Gegenteil tut

Um die Funktionsäquivalenz im ersten Fall zu gewährleisten, werden alle numerischen Parameter mit der Funktionto_varcharinstringumgewandelt, wodurch das Format der Zahlen berücksichtigt wird. Im zweiten Fall werden alle Zeitstempel mit to_date in ein Datum umgewandelt. Teradata ignoriert das Format der Zeitstempel bei der Transformation, so dass es bei der Transformation entfernt wird.

Beispielhafte Quellcode-Muster

Numerisch gemischt mit Zeichenfolge-Parametern

Teradata

Abfrage

 SELECT COALESCE(125, 'hello', cast(850 as format '-999'));
Copy

Ergebnis

COLUMN1|
-------+
125    |
Copy
Snowflake

Abfrage

SELECT
 COALESCE(TO_VARCHAR(125), 'hello', TO_VARCHAR(850, '9000'));
Copy

Ergebnis

COLUMN1|
-------+
125    |
Copy

Zeitstempel gemischt mit Datumsparametern

Teradata

Abfrage

 SELECT COALESCE(cast(TIMESTAMP '2021-09-14 10:14:59' as format 'HH:MI:SSBDD-MM-YYYY'), current_date);

Ergebnis

COLUMN1    |
-----------+
2021-09-14 |
Copy
Snowflake

Abfrage

SELECT
 COALESCE(TO_DATE(TIMESTAMP '2021-09-14 10:14:59' !!!RESOLVE EWI!!! /*** SSC-EWI-TD0025 - OUTPUT FORMAT 'HH:MI:SSBDD-MM-YYYY' NOT SUPPORTED. ***/!!!), CURRENT_DATE());
Copy

Ergebnis

COLUMN1    |
-----------+
2021-09-14 |
Copy

Bekannte Probleme

Keine bekannten Probleme_.\_

Zugehörige EWIs

CURRENT_TIMESTAMP

Schweregrad

Niedrig

Beschreibung

Bruchteile von Sekunden werden nur angezeigt, wenn dies explizit im Sitzungsparameter TIME_OUTPUT_FORMAT festgelegt ist.

Eingabecode:

SELECT current_timestamp(4) at local;
Copy

Ausgabecode:

SELECT
CURRENT_TIMESTAMP(4);
Copy

Empfehlungen

  • Prüfen Sie, ob der Sitzungsparameter TIME_OUTPUT___FORMAT so eingestellt ist, dass Sie die gewünschte Verhaltensweise erhalten.

  • Wenn Sie weitere Unterstützung benötigen, können Sie uns eine E-Mail an snowconvert-support@snowflake.com senden.

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

Keine zugehörigen EWIs.

DAYNUMBER_OF_MONTH

Beschreibung

Gibt die Anzahl der Tage zurück, die vom Monatsanfang bis zum angegebenen Datum verstrichen sind. Weitere Informationen finden Sie unter DAYNUMBER_OF_MONTH.

DAYNUMBER_OF_MONTH(expression [, calendar_name])
Copy

Sowohl Teradata als auch Snowflake behandeln die Funktion DAYNUMBER_OF_MONTH auf die gleiche Weise, mit einer Ausnahme:

  • Der ISO-Kalender: Ein ISO Monat hat 4 oder 5 vollständige Wochen. Weitere Informationen finden Sie unter Über ISO-Berechnung.

Um die funktionale Gleichwertigkeit zu gewährleisten, wird eine benutzerdefinierte Funktion (UDF) für den ISO-Kalenderfall hinzugefügt.

Beispielhafte Quellcode-Muster

Teradata

Abfrage

SELECT
    DAYNUMBER_OF_MONTH (DATE'2022-12-22'),
    DAYNUMBER_OF_MONTH (DATE'2022-12-22', NULL),
    DAYNUMBER_OF_MONTH (DATE'2022-12-22', 'Teradata'),
    DAYNUMBER_OF_MONTH (DATE'2022-12-22', 'COMPATIBLE');
Copy

Ergebnis

COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
22     |22     |22     |22     |
Copy

Snowflake

Abfrage

SELECT
    DAYOFMONTH(DATE'2022-12-22'),
    DAYOFMONTH(DATE'2022-12-22'),
    DAYOFMONTH(DATE'2022-12-22'),
    DAYOFMONTH(DATE'2022-12-22');
Copy

Ergebnis

COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
22     |22     |22     |22     |
Copy

ISO-Kalender

Teradata

Abfrage

SELECT DAYNUMBER_OF_MONTH (DATE'2022-12-22', 'ISO');
Copy

Ergebnis

COLUMN1|
-------+
25     |
Copy
Snowflake

Abfrage

SELECT
PUBLIC.DAYNUMBER_OF_MONTH_UDF(DATE'2022-12-22');
Copy

Ergebnis

COLUMN1|
-------+
25     |
Copy

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

Keine zugehörigen EWIs.

FROM_BYTES

Übersetzungsspezifikation für die Transformation der TO_CHAR-Funktion in eine entsprechende Funktionsverkettung in Snowflake

Beschreibung

Die Funktion FROM_BYTES kodiert eine Folge von Bits in eine Folge von Zeichen, die ihre Kodierung darstellen. Weitere Informationen finden Sie unter FROM_BYTES(Encoding).

Snowflake bietet keine Unterstützung für die Funktion FROM_BYTES. Für die häufigsten Fälle, in denen diese Funktion verwendet wird, gibt es Umgehungsmöglichkeiten.

Beispielhafte Quellcode-Muster

Teradata

Abfrage
 SELECT 
FROM_BYTES('5A1B'XB, 'base10'), --returns '23067'
FROM_BYTES('5A3F'XB, 'ASCII'), --returns 'Z\ESC '
FROM_BYTES('5A1B'XB, 'base16'); -- returns '5A1B'
Copy
Ergebnis
COLUMN1    | COLUMN2    | COLUMN3 |
-----------+------------+---------+
23067      |  Z\ESC     | 5A1B    |

Copy
Snowflake
Abfrage
 SELECT
--returns '23067'
TO_NUMBER('5A1B', 'XXXX'),
--returns 'Z\ESC '
!!!RESOLVE EWI!!! /*** SSC-EWI-0031 - FROM_BYTES FUNCTION NOT SUPPORTED ***/!!!
FROM_BYTES(TO_BINARY('5A3F'), 'ASCII'),
TO_BINARY('5A1B', 'HEX'); -- returns '5A1B'
Copy
Ergebnis
COLUMN1    | COLUMN2    | COLUMN3 |
-----------+------------+---------+
23067      |  Z\ESC     | 5A1B    |

Copy

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Bekannte Probleme

  1. TO_NUMBER-Formatparameter muss mit den Ziffern der Eingabezeichenfolge übereinstimmen.

  2. Es gibt keine funktional äquivalente integrierte Funktion für FROM_BYTES bei der Kodierung nach ANSI

Zugehörige EWIs

  1. SSC-EWI-0031: FUNCTION NOT SUPPORTED

GETQUERYBANDVALUE

Übersetzungsspezifikation für die Transformation von GetQueryBandValue in Snowflake

Beschreibung

Die Funktion GetQueryBandValue sucht einen Namensschlüssel innerhalb des Abfragebands und gibt den zugehörigen Wert zurück, falls vorhanden. Sie können damit innerhalb der Transaktion, der Sitzung, des Profils oder eines der Schlüsselwert-Paare des Abfragebands suchen.

Weitere Informationen zu dieser Funktion finden Sie unter GetQueryBandValue in der Teradata-Dokumentation.

[SYSLIB.]GetQueryBandValue([QueryBandIn,] SearchType, Name);

Copy

Beispielhafte Quellcode-Muster

Datenkonfiguration

Teradata
Abfrage
 SET QUERY_BAND = 'hola=hello;adios=bye;' FOR SESSION;
Copy
Snowflake
Abfrage
 ALTER SESSION SET QUERY_TAG = 'hola=hello;adios=bye;';
Copy

GetQueryBandValue mit dem QueryBandIn-Parameter

Teradata
Abfrage
 SELECT
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 0, 'account') as Example1,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 1, 'account') as Example2,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 2, 'account') as Example3,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 3, 'account') as Example4,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 0, 'role') as Example5,
GETQUERYBANDVALUE('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 1, 'role') as Example6;
Copy
Ergebnis
+----------+----------+----------+----------+----------+----------+
| EXAMPLE1 | EXAMPLE2 | EXAMPLE3 | EXAMPLE4 | EXAMPLE5 | EXAMPLE6 |
+----------+----------+----------+----------+----------+----------+
| Mark200  | Mark200  | SaraDB   | Peter3   | DbAdmin  |          |
+----------+----------+----------+----------+----------+----------+

Copy
Snowflake
Abfrage
 SELECT
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 0, 'account') as Example1,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 1, 'account') as Example2,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 2, 'account') as Example3,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 3, 'account') as Example4,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 0, 'role') as Example5,
GETQUERYBANDVALUE_UDF('=T> user=Mark;account=Mark200; =S> user=Sara;account=SaraDB;role=DbAdmin =P> user=Peter;account=Peter3;', 1, 'role') as Example6;
Copy
Ergebnis
+----------+----------+----------+----------+----------+----------+
| EXAMPLE1 | EXAMPLE2 | EXAMPLE3 | EXAMPLE4 | EXAMPLE5 | EXAMPLE6 |
+----------+----------+----------+----------+----------+----------+
| Mark200  | Mark200  | SaraDB   | Peter3   | DbAdmin  |          |
+----------+----------+----------+----------+----------+----------+

Copy

GetQueryBandValue ohne QueryBandIn-Parameter

Teradata
Abfrage
 SELECT
GETQUERYBANDVALUE(2, 'hola') as Example1,
GETQUERYBANDVALUE(2, 'adios') as Example2;
Copy
Ergebnis
+----------+----------+
| EXAMPLE1 | EXAMPLE2 |
+----------+----------+
| hello    | bye      |
+----------+----------+

Copy
Snowflake
Abfrage
 SELECT
GETQUERYBANDVALUE_UDF('hola') as Example1,
GETQUERYBANDVALUE_UDF('adios') as Example2;
Copy
Ergebnis
+----------+----------+
| EXAMPLE1 | EXAMPLE2 |
+----------+----------+
| hello    | bye      |
+----------+----------+

Copy

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Bekannte Probleme

1. GetQueryBandValue ohne QueryBandIn-Parameter nur für Sitzung unterstützt

Teradata ermöglicht die Definition von Abfragebändern auf Transaktions-, Sitzungs- oder Profilebene. Wenn GetQueryBandValue ohne Angabe eines Abfragebands aufgerufen wird, prüft Teradata automatisch die Transaktions-, Sitzungs- oder Profil-Abfragebands, je nach dem Wert des Parameters SearchType.

In Snowflake sind die Abfrage-Tags, die für Sitzung, Benutzer und Konten angegeben werden können, das engste Äquivalent zu Abfragebands.

Aufgrund dieser Unterschiede berücksichtigt die Implementierung von GetQueryBandValue ohne den Parameter QueryBandIn nur das Abfrage-Tag der Sitzung und funktioniert bei anderen Sucharten möglicherweise nicht wie erwartet.

Zugehörige EWIs

Keine zugehörigen EWIs.

JSON_CHECK

Beschreibung

Die Funktion JSON_CHECK überprüft eine Zeichenfolge auf eine gültige JSON.

Weitere Informationen zu Teradata JSON_CHECK finden Sie hier .

[TD_SYSFNLIB.]JSON_CHECK(string_expr);
Copy

Beispielhaftes Quellcode-Muster

Grundlegendes Quellcode-Muster

Teradata

Abfrage

SELECT JSON_CHECK('{"key": "value"}');
Copy
Snowflake Scripting

Abfrage

SELECT
IFNULL(CHECK_JSON('{"key": "value"}'), 'OK');
Copy

JSON_CHECK innerhalb CASE-Transformation

Teradata

Abfrage

SELECT CASE WHEN JSON_CHECK('{}') = 'OK' then 'OKK' ELSE 'NOT OK' END;
Copy
Snowflake Scripting

Abfrage

SELECT
CASE
WHEN UPPER(RTRIM(IFNULL(CHECK_JSON('{}'), 'OK'))) = UPPER(RTRIM('OK'))
THEN 'OKK' ELSE 'NOT OK'
END;
Copy

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

Keine zugehörigen EWIs.

JSON_EXTRACT

Übersetzungsreferenz zur Konvertierung der Teradata-Funktionen JSONExtractValue, JSONExtractLargeValue und JSONExtract in Snowflake Scripting.

Beschreibung

Wie in der Dokumentation von Teradata beschrieben, verwenden diese Funktionen die JSONPath Abfrage-Syntax, um Informationen über einen Teil einer JSON-Instanz abzufragen. Die gewünschte Entität kann ein beliebiger Teil einer JSON-Instanz sein, wie z. B. ein Name/Wert-Paar, ein Objekt, ein Array, ein Arrayelement oder ein Wert.

Weitere Informationen zu Teradata JSONExtractValue, JSONExtractLargeValue und JSONExtract, finden Sie hier.

 JSON_expr.JSONExtractValue(JSONPath_expr)

JSON_expr.JSONExtractLargeValue(JSONPath_expr)

JSON_expr.JSONExtract(JSONPath_expr)
Copy

Die JSON_EXTRACT_UDF ist eine Snowflake-Implementierung der JSONPath-Spezifikation, die eine modifizierte Version der ursprünglichen JavaScript-Implementierung von Stefan Goessner verwendet.

Beispielhaftes Quellcode-Muster

Teradata
Abfrage
 SELECT
    Store.JSONExtract('$..author') as AllAuthors,
    Store.JSONExtractValue('$..book[2].title') as ThirdBookTitle,
    Store.JSONExtractLargeValue('$..book[2].price') as ThirdBookPrice
FROM BookStores;
Copy
Snowflake Scripting
Abfrage
 SELECT
    JSON_EXTRACT_UDF(Store, '$..author', FALSE) as AllAuthors,
    JSON_EXTRACT_UDF(Store, '$..book[2].title', TRUE) as ThirdBookTitle,
    JSON_EXTRACT_UDF(Store, '$..book[2].price', TRUE) as ThirdBookPrice
    FROM
    BookStores;
Copy

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Bekannte Probleme

1. Elements inside JSONs may not retain their original order.

Elemente innerhalb einer JSON werden beim Einfügen in eine Tabelle nach ihren Schlüsseln geordnet. Daher können die Abfrageergebnisse abweichen. Dies hat jedoch keinen Einfluss auf die Reihenfolge der Arrays innerhalb der JSON.

Wenn zum Beispiel das Original JSON lautet:

 { 
   "firstName":"Peter",
   "lastName":"Andre",
   "age":31,
   "cities": ["Los Angeles", "Lima", "Buenos Aires"]
}
Copy

Verwendung der Snowflake PARSE_JSON(), die eine Eingabezeichenfolge als JSON-Dokument interpretiert und einen VARIANT-Wert erzeugt. Die eingefügte JSON wird sein:

 { 
   "age": 31,
   "cities": ["Los Angeles", "Lima", "Buenos Aires"],
   "firstName": "Peter",
   "lastName": "Andre" 
}
Copy

Beachten Sie, dass „Alter“ jetzt das erste Element ist. Der Array der „Städte“ behält jedoch seine ursprüngliche Reihenfolge bei.

Zugehörige EWIs

Keine zugehörigen EWIs.

JSON_TABLE

Übersetzungsspezifikation für die Transformation von JSON_TABLE in eine entsprechende Abfrage in Snowflake

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Beschreibung

Erzeugt eine Tabelle auf der Grundlage des Inhalts eines JSON-Dokuments. Siehe JSON_TABLE Dokumentation.

[TD_SYSFNLIB.]JSON_TABLE(
  ON (json_documents_retrieving_expr)
  USING 
      ROWEXPR (row_expr_literal) 
      COLEXPR (column_expr_literal)
  [AS] correlation_name [(column_name [,...])]
)

Copy

Die Umrechnung von JSON_TABLE hat die unten dargestellten Überlegungen:

  • ROW_NUMBER() ist ein Äquivalent für Ordnungszahlspalten in Snowflake.

  • In Teradata muss die zweite Spalte von JSON_TABLE vom Typ JSON sein, da die generierten Spalten die zweite Spalte ersetzen. Aus diesem Grund geht SnowConvert AI davon aus, dass die Spalte den richtigen Typ hat, und verwendet ihn für die Transformation.

Beispielhafte Quellcode-Muster

Datenkonfiguration

Teradata
Abfrage
 create table myJsonTable(
 col1 integer,
 col2 JSON(1000)
 );
 
 
insert into myJsonTable values(1, 
new json('{
"name": "Matt",
"age" : 30,
"songs" : [
	{"name" : "Late night", "genre" : "Jazz"},
	{"name" : "Wake up", "genre" : "Rock"},
	{"name" : "Who am I", "genre" : "Rock"},
	{"name" : "Raining", "genre" : "Blues"}
]
}'));
Copy
Snowflake
Abfrage
 CREATE OR REPLACE TABLE myJsonTable (
 col1 integer,
 col2 VARIANT
 )
 COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO myJsonTable
VALUES (1, TO_JSON(PARSE_JSON('{
"name": "Matt",
"age" : 30,
"songs" : [
	{"name" : "Late night", "genre" : "Jazz"},
	{"name" : "Wake up", "genre" : "Rock"},
	{"name" : "Who am I", "genre" : "Rock"},
	{"name" : "Raining", "genre" : "Blues"}
]
}')));
Copy

Mustercode 1

Teradata
Abfrage
 SELECT * FROM
JSON_TABLE(ON (SELECT COL1, COL2 FROM myJsonTable WHERE col1 = 1)
USING rowexpr('$.songs[*]')
colexpr('[ {"jsonpath" : "$.name",
            "type" : "CHAR(20)"},
            {"jsonpath" : "$.genre",
             "type" : "VARCHAR(20)"}]')) AS JT(ID, "Song name", Genre);
Copy
Ergebnis
ID | Song name  | Genre |
---+------------+-------+
1  | Late night | Jazz  |
---+------------+-------+
1  | Wake up    | Rock  |
---+------------+-------+
1  | Who am I   | Rock  |
---+------------+-------+
1  | Raining    | Blues |

Copy
Snowflake
Abfrage
 SELECT
* FROM
(
SELECT
COL1 AS ID,
rowexpr.value:name :: CHAR(20) AS "Song name",
rowexpr.value:genre :: VARCHAR(20) AS Genre
FROM
myJsonTable,
TABLE(FLATTEN(INPUT => COL2:songs)) rowexpr
WHERE col1 = 1
) JT;
Copy
Ergebnis
ID | Song name  | Genre |
---+------------+-------+
1  | Late night | Jazz  |
---+------------+-------+
1  | Wake up    | Rock  |
---+------------+-------+
1  | Who am I   | Rock  |
---+------------+-------+
1  | Raining    | Blues |

Copy

Bekannte Probleme

1. Der Pfad JSON in COLEXPR darf keine mehreren Sternchenzugriffe haben

Die JSON-Pfad in den Spalten darf keine mehrere Listen mit Sternchenzugriff haben, zum Beispiel: $.Names[*].FullNames[*]. Der JSON-Pfad von ROWEXP kann dies hingegen enthalten.

2. Die JSON-Struktur, die in dem COLEXPR-Literal definiert ist, muss eine gültige JSON-Struktur sein

Wenn dies nicht der Fall ist, wird der Benutzer gewarnt, dass die JSON-Struktur fehlerhaft ist.

Zugehörige EWIs

Keine zugehörigen EWIs.

NEW JSON

Beschreibung

Weist eine neue Instanz eines JSON-Datentyps zu. Weitere Informationen finden Sie unter NEW JSON-Konstruktor-Ausdruck Expression.

NEW JSON ( [ JSON_string_spec | JSON_binary_data_spec ] )

JSON_string_spec := JSON_String_literal [, { LATIN | UNICODE | BSON | UBJSON } ]

JSON_binary_data_spec := JSON_binary_literal [, { BSON | UBJSON } ]
Copy

Der zweite Parameter der Funktion NEW JSON wird von SnowConvert AI immer weggelassen, da Snowflake nur mit UTF-8 arbeitet.

Beispielhafte Quellcode-Muster

NEW JSON mit Zeichenfolgen-Daten

Teradata

Abfrage

SELECT NEW JSON ('{"name" : "cameron", "age" : 24}'),
NEW JSON ('{"name" : "cameron", "age" : 24}', LATIN);
Copy

Ergebnis

COLUMN1

COLUMN2

{„age“:24,“name“:“cameron“}

{„age“:24,“name“:“cameron“}

Snowflake

Abfrage

SELECT
TO_JSON(PARSE_JSON('{"name" : "cameron", "age" : 24}')),
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0039 - INPUT FORMAT 'LATIN' NOT SUPPORTED ***/!!!
TO_JSON(PARSE_JSON('{"name" : "cameron", "age" : 24}'));
Copy

Ergebnis

COLUMN1

COLUMN2

{„age“:24,“name“:“cameron“}

{„age“:24,“name“:“cameron“}

Bekannte Probleme

1. Der zweite Parameter wird nicht unterstützt

Der zweite Parameter der Funktion, mit dem das Format der resultierenden JSON angegeben wird, wird nicht unterstützt, da Snowflake nur UTF-8 unterstützt, was bei einigen Verwendungen der Funktion zu Funktionsunterschieden führen kann.

2. JSON mit BINARY-Daten wird nicht unterstützt

Snowflake unterstützt nicht das Parsen von Binärdaten zur Erstellung eines JSON-Werts. Benutzende werden gewarnt, wenn SnowConvert AI einen NEW JSON-Wert im Zusammenhang mit Binärdaten findet.

Zugehörige EWIs

  1. SSC-EWI-TD0039: Eingabeformat nicht unterstützt.

NVP

Beschreibung

Extrahiert den Wert des Schlüsselwert-Paares, bei dem der Schlüssel mit dem n-ten Vorkommen des angegebenen Suchnamens übereinstimmt. Siehe NVP.

[TD_SYSFNLIB.] NVP (
in_string,
name_to_search
[, name_delimiters ]
[, value_delimiters ]
[, occurrence ]
)
Copy

Beispielhafte Quellcode-Muster

NVP-Grundfall

Teradata

Abfrage

SELECT
NVP('entree=-orange chicken&entree+.honey salmon', 'entree', '&', '=- +.', 1),
NVP('Hello=bye|name=Lucas|Hello=world!', 'Hello', '|', '=', 2),
NVP('Player=Mario$Game&Tenis%Player/Susana$Game=Chess', 'Player', '% $', '= & /', 2);
Copy

Ergebnis

COLUMN1        | COLUMN2 | COLUMN3 |
---------------+---------+---------+
orange chicken | world!  | Susana  |
Copy
Snowflake

Abfrage

SELECT
PUBLIC.NVP_UDF('entree=-orange chicken&entree+.honey salmon', 'entree', '&', '=- +.', 1),
PUBLIC.NVP_UDF('Hello=bye|name=Lucas|Hello=world!', 'Hello', '|', '=', 2),
PUBLIC.NVP_UDF('Player=Mario$Game&Tenis%Player/Susana$Game=Chess', 'Player', '% $', '= & /', 2);
Copy

Ergebnis

COLUMN1        | COLUMN2 | COLUMN3 |
---------------+---------+---------+
orange chicken | world!  | Susana  |
Copy

NVP wobei optionale Parameter ignoriert werden

Teradata

Abfrage

SELECT
NVP('City=Los Angeles&Color=Green&Color=Blue&City=San Jose', 'Color'),
NVP('City=Los Angeles&Color=Green&Color=Blue&City=San Jose', 'Color', 2),
NVP('City=Los Angeles#Color=Green#Color=Blue#City=San Jose', 'City', '#', '=');
Copy

Ergebnis

COLUMN1 | COLUMN2 | COLUMN3     |
--------+---------+-------------+
Green   | Blue    | Los Angeles |
Copy
Snowflake

Abfrage

SELECT
    PUBLIC.NVP_UDF('City=Los Angeles&Color=Green&Color=Blue&City=San Jose', 'Color', '&', '=', 1),
    PUBLIC.NVP_UDF('City=Los Angeles&Color=Green&Color=Blue&City=San Jose', 'Color', '&', '=', 2),
    PUBLIC.NVP_UDF('City=Los Angeles#Color=Green#Color=Blue#City=San Jose', 'City', '#', '=', 1);
Copy

Ergebnis

COLUMN1 | COLUMN2 | COLUMN3     |
--------+---------+-------------+
Green   | Blue    | Los Angeles |
Copy

NVP mit Leerzeichen als Trennzeichen

Teradata

Abfrage

SELECT
NVP('store = whole foods&&store: ?Bristol farms','store', '&&', '\ =\  :\ ?', 2),
NVP('Hello = bye|name = Lucas|Hello = world!', 'Hello', '|', '\ =\ ', 2);
Copy

Ergebnis

COLUMN1       | COLUMN2 |
--------------+---------+
Bristol farms | world!  |
Copy
Snowflake

Abfrage

SELECT
PUBLIC.NVP_UDF('store = whole foods&&store: ?Bristol farms', 'store', '&&', '\\ =\\  :\\ ?', 2),
PUBLIC.NVP_UDF('Hello = bye|name = Lucas|Hello = world!', 'Hello', '|', '\\ =\\ ', 2);
Copy

Ergebnis

COLUMN1       | COLUMN2 |
--------------+---------+
Bristol farms | world!  |
Copy

NVP mit nicht-literalen Trennzeichen

Teradata

Abfrage

SELECT NVP('store = whole foods&&store: ?Bristol farms','store', '&&', valueDelimiter, 2);
Copy
Snowflake

Abfrage

SELECT
PUBLIC.NVP_UDF('store = whole foods&&store: ?Bristol farms', 'store', '&&', valueDelimiter, 2) /*** SSC-FDM-TD0008 - WHEN NVP_UDF FOURTH PARAMETER IS NON-LITERAL AND IT CONTAINS A BACKSLASH, THAT BACKSLASH NEEDS TO BE ESCAPED ***/;
Copy

Bekannte Probleme

1. Bei Trennzeichen mit Leerzeichen () muss der Backslash in Snowflake weggelassen werden

In Teradata werden Trennzeichen, die Leerzeichen enthalten, mit „“ angegeben (siehe NVP mit Leerzeichen in Trennzeichen). Wie in den Beispielen gezeigt, ist es in Teradata nicht notwendig, den Backslash zu in Escape-Zeichen zu setzen, in Snowflake hingegen schon. Das Umschließen der Backslashes mit Escape-Zeichen im Trennzeichen kann automatisch durch SnowConvert AI erfolgen, aber nur, wenn die Trennzeichen literale Zeichenfolgen sind. Andernfalls werden Benutzende gewarnt, dass die Backlashes nicht in Escape-Zeichen gesetzt werden konnten und dass dies in Snowflake zu unterschiedlichen Ergebnissen führen kann.

Zugehörige EWIs

  1. SSC-FDM-TD0008: Bei Trennzeichen, die keine Literale mit Leerzeichen enthalten, muss der Backslash in Snowflake mit Escape-Zeichen versehen werden.

OVERLAPS

Beschreibung

Laut der Dokumentation von Teradata vergleicht der Operator OVERLAPS zwei oder mehr Zeitraumausdrücke. Wenn sie sich überschneiden, gibt er „true“ zurück.

Weitere Informationen zu OVERLAPS in Teradata finden Sie hier.

period_expression
OVERLAPS
period_expression
Copy

Die PERIOD_OVERLAPS_UDF ist eine Snowflake-Implementierung des OVERLAPS-Operators in Teradata.

Beispielhaftes Quellcode-Muster

Teradata

Abfrage

SELECT 
    PERIOD(DATE '2009-01-01', DATE '2010-09-24') 
    OVERLAPS
    PERIOD(DATE '2009-02-01', DATE '2009-06-24');
Copy

Snowflake Scripting

Abfrage

SELECT
    PUBLIC.PERIOD_OVERLAPS_UDF(ARRAY_CONSTRUCT(PUBLIC.PERIOD_UDF(DATE '2009-01-01', DATE '2010-09-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!, PUBLIC.PERIOD_UDF(DATE '2009-02-01', DATE '2009-06-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!)) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!;
Copy

Bekannte Probleme

1. Unsupported Period Expressions

Die Ausdrücke PERIOD(TIME WITH TIME ZONE) und PERIOD(TIMESTAMP WITH TIME ZONE) werden noch nicht unterstützt.

Zugehörige EWIs

  1. SSC-EWI-TD0053: Snowflake unterstützt nicht den Zeittyp, da alle Zeiträume stattdessen als varchar behandelt werden.

P_INTERSECT

Beschreibung

Laut der Dokumentation von Teradata vergleicht der Operator P_INTERSECT zwei oder mehr Zeitraumausdrücke. Wenn sie sich überschneiden, wird der gemeinsame Teil der Zeitraumausdrücke zurückgegeben.

Weitere Informationen zu P_INTERSECT in Teradata finden Sie unter [hier] (https://docs.teradata.com/r/kmuOwjp1zEYg98JsB8fu_A/iW6iefgeyOypFOMY2qGG_A).

period_expression
P_INTERSECT
period_expression
Copy

Die PERIOD_INTERSECT_UDF ist eine Snowflake-Implementierung des Operators P_INTERSECT in Teradata.

Beispielhaftes Quellcode-Muster

Teradata

Abfrage

SELECT 
    PERIOD(DATE '2009-01-01', DATE '2010-09-24') 
    P_INTERSECT 
    PERIOD(DATE '2009-02-01', DATE '2009-06-24');
Copy

Snowflake Scripting

Abfrage

SELECT
    PUBLIC.PERIOD_INTERSECT_UDF(ARRAY_CONSTRUCT(PUBLIC.PERIOD_UDF(DATE '2009-01-01', DATE '2010-09-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!, PUBLIC.PERIOD_UDF(DATE '2009-02-01', DATE '2009-06-24') !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!)) !!!RESOLVE EWI!!! /*** SSC-EWI-TD0053 - SNOWFLAKE DOES NOT SUPPORT THE PERIOD DATATYPE, ALL PERIODS ARE HANDLED AS VARCHAR INSTEAD ***/!!!;
Copy

Bekannte Probleme

1. Unsupported Period Expressions

Die Ausdrücke PERIOD(TIME WITH TIME ZONE) und PERIOD(TIMESTAMP WITH TIME ZONE) werden noch nicht unterstützt.

Zugehörige EWIs

  1. SSC-EWI-TD0053: Snowflake unterstützt nicht den Zeittyp, da alle Zeiträume stattdessen als varchar behandelt werden.

PIVOT

Übersetzungsspezifikation für die PIVOT-Funktion von Teradata zu Snowflake

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Beschreibung

Die Pivot-Funktion wird verwendet, um Zeilen einer Tabelle in Spalten umzuwandeln. Weitere Informationen finden Sie in der PIVOT Teradata-Dokumentation.

PIVOT ( pivot_spec )
  [ WITH with_spec [,...] ]
  [AS] derived_table_name [ ( cname [,...] ) ]
  
pivot_spec := aggr_fn_spec [,...] FOR for_spec

aggr_fn_spec := aggr_fn ( cname ) [ [AS] pvt_aggr_alias ]

for_spec := { cname IN ( expr_spec_1 [,...] ) |
( cname [,...] ) IN ( expr_spec_2 [,...] ) |
cname IN ( subquery )
}

expr_spec_1 := expr [ [AS] expr_alias_name ]

expr_spec_2 := ( expr [,...] ) [ [AS] expr_alias_name ]

with_spec := aggr_fn ( { cname [,...] | * } ) [AS] aggr_alias

Copy

Beispielhafte Quellcode-Muster

Datenkonfiguration

Teradata
Abfrage
 CREATE TABLE star1(
	country VARCHAR(20),
	state VARCHAR(10), 
	yr INTEGER,
	qtr VARCHAR(3),
	sales INTEGER,
	cogs INTEGER
);

insert into star1 values ('USA', 'CA', 2001, 'Q1', 30, 15);
insert into star1 values ('Canada', 'ON', 2001, 'Q2', 10, 0);
insert into star1 values ('Canada', 'BC', 2001, 'Q3', 10, 0);
insert into star1 values ('USA', 'NY', 2001, 'Q1', 45, 25);
insert into star1 values ('USA', 'CA', 2001, 'Q2', 50, 20);
Copy
Snowflake
Abfrage
 CREATE OR REPLACE TABLE star1 (
	country VARCHAR(20),
	state VARCHAR(10),
	yr INTEGER,
	qtr VARCHAR(3),
	sales INTEGER,
	cogs INTEGER
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO star1
VALUES ('USA', 'CA', 2001, 'Q1', 30, 15);

INSERT INTO star1
VALUES ('Canada', 'ON', 2001, 'Q2', 10, 0);

INSERT INTO star1
VALUES ('Canada', 'BC', 2001, 'Q3', 10, 0);

INSERT INTO star1
VALUES ('USA', 'NY', 2001, 'Q1', 45, 25);

INSERT INTO star1
VALUES ('USA', 'CA', 2001, 'Q2', 50, 20);
Copy

Grundlegende PIVOT-Transformation

Teradata
Abfrage
 SELECT *
FROM star1 PIVOT (
	SUM(sales) FOR qtr                                                                                               
    IN ('Q1',                                                                                                     
    	'Q2', 
        'Q3')
)Tmp;
Copy
Ergebnis
Country | State | yr   | cogs | 'Q1' | 'Q2' | 'Q3' |
--------+-------+------+------+------+------+------+
Canada	| BC	| 2001 | 0    | null | null | 10   |
--------+-------+------+------+------+------+------+
USA 	| NY	| 2001 | 25   | 45   | null | null |
--------+-------+------+------+------+------+------+
Canada 	| ON 	| 2001 | 0    | null | 10   | null |
--------+-------+------+------+------+------+------+
USA 	| CA 	| 2001 | 20   | null | 50   | null |
--------+-------+------+------+------+------+------+
USA 	| CA 	| 2001 | 15   | 30   | null | null |
--------+-------+------+------+------+------+------+

Copy
Snowflake
Abfrage
 SELECT
	*
FROM
	star1 PIVOT(
	SUM(sales) FOR qtr IN ('Q1',
	   	'Q2',
	       'Q3'))Tmp;
Copy
Ergebnis
Country | State | yr   | cogs | 'Q1' | 'Q2' | 'Q3' |
--------+-------+------+------+------+------+------+
Canada	| BC	| 2001 | 0    | null | null | 10   |
--------+-------+------+------+------+------+------+
USA 	| NY	| 2001 | 25   | 45   | null | null |
--------+-------+------+------+------+------+------+
Canada 	| ON 	| 2001 | 0    | null | 10   | null |
--------+-------+------+------+------+------+------+
USA 	| CA 	| 2001 | 20   | null | 50   | null |
--------+-------+------+------+------+------+------+
USA 	| CA 	| 2001 | 15   | 30   | null | null |
--------+-------+------+------+------+------+------+

Copy

PIVOT mit Transformation von Aliasen

Teradata
Abfrage
 SELECT *
FROM star1 PIVOT (
	SUM(sales) as ss1 FOR qtr                                                                                               
    IN ('Q1' AS Quarter1,                                                                                                     
    	'Q2' AS Quarter2, 
        'Q3' AS Quarter3)
)Tmp;
Copy
Ergebnis
Country | State | yr   | cogs | Quarter1_ss1 | Quarter2_ss1 | Quarter3_ss1 |
--------+-------+------+------+--------------+--------------+--------------+
Canada	| BC	| 2001 | 0    | null 	     | null         | 10           |
--------+-------+------+------+--------------+--------------+--------------+
USA 	| NY	| 2001 | 25   | 45 	     | null 	    | null         |
--------+-------+------+------+--------------+--------------+--------------+
Canada 	| ON 	| 2001 | 0    | null 	     | 10 	    | null 	   |
--------+-------+------+------+--------------+--------------+--------------+
USA 	| CA 	| 2001 | 20   | null         | 50           | null         |
--------+-------+------+------+--------------+--------------+--------------+
USA 	| CA 	| 2001 | 15   | 30           | null         | null         |
--------+-------+------+------+--------------+--------------+--------------+

Copy
Snowflake
Abfrage
 SELECT
	*
FROM
	!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/!!!
	star1 PIVOT(
	SUM(sales) FOR qtr IN (
	                       !!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/!!!
	                       'Q1',
	!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/!!!
	   	'Q2',
	!!!RESOLVE EWI!!! /*** SSC-EWI-0015 - PIVOT/UNPIVOT RENAME COLUMN NOT SUPPORTED ***/!!!
	       'Q3'))Tmp;
Copy
Ergebnis
 Country | State | yr   | cogs | Quarter1_ss1 | Quarter2_ss1 | Quarter3_ss1 |
--------+-------+------+------+--------------+--------------+--------------+
Canada	| BC	| 2001 | 0    | null 	     | null         | 10           |
--------+-------+------+------+--------------+--------------+--------------+
USA 	| NY	| 2001 | 25   | 45 	     | null 	    | null         |
--------+-------+------+------+--------------+--------------+--------------+
Canada 	| ON 	| 2001 | 0    | null 	     | 10 	    | null 	   |
--------+-------+------+------+--------------+--------------+--------------+
USA 	| CA 	| 2001 | 20   | null         | 50           | null         |
--------+-------+------+------+--------------+--------------+--------------+
USA 	| CA 	| 2001 | 15   | 30           | null         | null         |
--------+-------+------+------+--------------+--------------+--------------+
Copy

Bekannte Probleme

1. WITH-Klausel nicht unterstützt

Die Verwendung der WITH-Klausel wird derzeit nicht unterstützt.

2. Pivot über mehrere Pivot-Spalten nicht unterstützt

SnowConvert AI transformiert die PIVOT-Funktion in die PIVOT-Funktion in Snowflake, die nur die Anwendung der Funktion auf eine einzelne Spalte unterstützt.

3. Pivot mit mehreren Aggregatfunktionen nicht unterstützt

Die Funktion PIVOT in Snowflake unterstützt nur die Anwendung einer Aggregatfunktion auf die Daten.

4. Unterabfrage in der IN-Klausel nicht unterstützt

Die IN-Klausel der Snowflake PIVOT-Funktion akzeptiert keine Unterabfragen.

5. Aliase werden nur unterstützt, wenn alle IN-Klausel-Elemente sie haben und eine Tabellenspezifikation vorhanden ist

Damit die Spaltennamen mit Aliasnamen gleichwertig sind, muss Folgendes berücksichtigt werden: SnowConvert AI setzt voraus, dass für alle in der IN-Klausel angegebenen Werte ein Alias angegeben und die Tabellenspezifikation im Eingabecode vorhanden ist. Dies ist notwendig, damit SnowConvert AI die Alias-Liste für die resultierende Tabelle erfolgreich erstellen kann.

Zugehörige EWIs

  1. SSC-EWI-0015: Die pivot/unpivot-Anweisungsformat für die Eingabe wird nicht unterstützt.

RANK

Übersetzungsspezifikation für die Transformation der RANK()-Funktion

Beschreibung

RANK sortiert ein Resultset und identifiziert den numerischen Rang jeder Zeile im Ergebnis. Das einzige Argument für RANK ist die Sortierspalte bzw. die Sortierspalten, und die Funktion gibt eine ganze Zahl zurück, die den Rang jeder Zeile im Ergebnis darstellt. (RANK in Teradata)

Teradata-Syntax

 RANK ( sort_expression [ ASC | DESC ] [,...] )
Copy

Snowflake-Syntax

 RANK() OVER 
( 
    [ PARTITION BY <expr1> ]
    ORDER BY <expr2> [ { ASC | DESC } ] 
    [ <window_frame> ]
)
Copy

Beispielhaftes Quellcode-Muster

Datenkonfiguration

Teradata
Abfrage
 CREATE TABLE Sales (
  Product VARCHAR(255),
  Sales INT
);

INSERT INTO Sales (Product, Sales) VALUES ('A', 100);
INSERT INTO Sales (Product, Sales) VALUES ('B', 150);
INSERT INTO Sales (Product, Sales) VALUES ('C', 200);
INSERT INTO Sales (Product, Sales) VALUES ('D', 150);
INSERT INTO Sales (Product, Sales) VALUES ('E', 120);
INSERT INTO Sales (Product, Sales) VALUES ('F', NULL);
Copy
Snowflake
Abfrage
 CREATE OR REPLACE TABLE Sales (
  Product VARCHAR(255),
  Sales INT
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO Sales (Product, Sales)
VALUES ('A', 100);

INSERT INTO Sales (Product, Sales)
VALUES ('B', 150);

INSERT INTO Sales (Product, Sales)
VALUES ('C', 200);

INSERT INTO Sales (Product, Sales)
VALUES ('D', 150);

INSERT INTO Sales (Product, Sales)
VALUES ('E', 120);

INSERT INTO Sales (Product, Sales)
VALUES ('F', NULL);
Copy

RANK() mit der Reihenfolge ASC, DESC und DEFAULT

Teradata

Warnung

Beachten Sie, dass der Standardwert von Teradata für die Bestellung beim Aufruf von RANK() DESC ist. Die Standardeinstellung in Snowflake ist jedoch ASC. So wird DESC bei der Umwandlung von RANK() hinzugefügt, wenn keine Reihenfolge angegeben ist.

Abfrage
 SELECT
  Sales,
  RANK(Sales ASC) AS SalesAsc,
  RANK(Sales DESC) AS SalesDesc,
  RANK(Sales) AS SalesDefault
FROM
  Sales;
Copy
Ergebnis
SALESSALESASCSALESDESCSALESDEFAULT
NULL666
200511
150322
150322
120244
100155
Snowflake
Abfrage
 SELECT
  Sales,
  RANK() OVER (
  ORDER BY
    Sales ASC) AS SalesAsc,
    RANK() OVER (
    ORDER BY
    Sales DESC NULLS LAST) AS SalesDesc,
    RANK() OVER (
    ORDER BY
    Sales DESC NULLS LAST) AS SalesDefault
    FROM
    Sales;
Copy
Ergebnis
SALESSALESASCSALESDESCSALESDEFAULT
NULL666
200511
150322
150322
120244
100155

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

Keine zugehörigen EWIs.

Regex-Funktionen

Beschreibung

Sowohl Teradata als auch Snowflake bieten Unterstützung für Funktionen, die reguläre Ausdrücke auf Varchar-Eingaben anwenden. Weitere Einzelheiten finden Sie in der Teradata-Dokumentation und der Snowflake-Dokumentation.

REGEXP_SUBSTR(source. regexp [, position, occurrence, match])
REGEXP_REPLACE(source. regexp [, replace_string, position, occurrence, match])
REGEXP_INSTR(source. regexp [, position, occurrence, return_option, match])
REGEXP_SIMILAR(source. regexp [, match])
REGEXP_SPLIT_TO_TABLE(inKey. source. regexp, match)
Copy

Beispielhafte Quellcode-Muster

Datenkonfiguration

Teradata

Abfrage

CREATE TABLE regexpTable
(
    col1 CHAR(35)
);

INSERT INTO regexpTable VALUES('hola');
Copy
Snowflake

Abfrage

CREATE OR REPLACE TABLE regexpTable
(
    col1 CHAR(35)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO regexpTable
VALUES ('hola');
Copy

Beispiel einer Regex-Transformation

Teradata

Abfrage

SELECT
REGEXP_REPLACE(col1,'.*(h(i|o))','ha', 1, 0, 'x'),
REGEXP_SUBSTR(COL1,'.*(h(i|o))', 2, 1, 'x'),
REGEXP_INSTR(COL1,'.*(h(i|o))',1, 1, 0, 'x'),
REGEXP_SIMILAR(COL1,'.*(h(i|o))', 'xl')
FROM regexpTable;
Copy

Ergebnis

COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
hala   |null   |1      |0      |
Copy
Snowflake

Abfrage

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "regexpTable" **
SELECT
REGEXP_REPLACE(col1, '.*(h(i|o))', 'ha', 1, 0),
REGEXP_SUBSTR(COL1, '.*(h(i|o))', 2, 1),
REGEXP_INSTR(COL1, '.*(h(i|o))', 1, 1, 0),
--** SSC-FDM-TD0016 - VALUE 'l' FOR PARAMETER 'match_arg' IS NOT SUPPORTED IN SNOWFLAKE **
REGEXP_LIKE(COL1, '.*(h(i|o))')
FROM
regexpTable;
Copy

Ergebnis

COLUMN1|COLUMN2|COLUMN3|COLUMN4|
-------+-------+-------+-------+
hala   |null   |1      |FALSE  |
Copy

Bekannte Probleme

1. Snowflake unterstützt nur POSIX-reguläre Ausdrücke

Benutzende werden gewarnt, wenn SnowConvert AI einen regulären Nicht-POSIX-Ausdruck findet.

2. Die Teradata-Option „match_arg“ ‚l‘ wird in Snowflake nicht unterstützt

Die Option „l“ hat kein Entsprechung in Snowflake und Benutzende werden gewarnt, wenn SnowConvert AI sie findet.

3. Feste Größe des Datentyps CHAR kann zu einer unterschiedlichen Verhaltensweisen führen

Einige Regex-Funktionen in Teradata versuchen, die gesamte Spalte des Datentyps CHAR in einer Tabelle abzugleichen, auch wenn einige der Zeichen in der Spalte leer geblieben sind, weil eine kleinere Zeichenfolge eingefügt wurde. In Snowflake ist dies nicht der Fall, da der Datentyp CHAR eine variable Größe hat.

4. REGEXP_SPLIT\_TO\_TABLE nicht unterstützt

Diese Funktion wird derzeit nicht von Snowflake unterstützt.

Zugehörige EWIs

  1. SSC-FDM-0007: Element mit fehlenden Abhängigkeiten.

  2. SSC-FDM-TD0016: Der Wert „l“ für den Parameter „match_arg“ wird in Snowflake nicht unterstützt.

STRTOK_SPLIT_TO_TABLE

Beschreibung

Zerlegt eine Zeichenfolge in eine Tabelle unter Verwendung der angegebenen Trennzeichen. Weitere Informationen finden Sie unter STRTOK_SPLIT_TO_TABLE.

[TD_SYSFNLIB.] STRTOK_SPLIT_TO_TABLE ( inkey, instring, delimiters )
  RETURNS ( outkey, tokennum, token )
Copy

Beispielhafte Quellcode-Muster

Datenkonfiguration

Teradata

Abfrage

CREATE TABLE strtokTable
(
	col1 INTEGER,
	col2 VARCHAR(100)
);

INSERT INTO strtokTable VALUES(4, 'hello-world-split-me');
INSERT INTO strtokTable VALUES(1, 'string$split$by$dollars');
Copy
Snowflake

Abfrage

CREATE OR REPLACE TABLE strtokTable
(
	col1 INTEGER,
	col2 VARCHAR(100)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO strtokTable
VALUES (4, 'hello-world-split-me');

INSERT INTO strtokTable
VALUES (1, 'string$split$by$dollars');
Copy

STRTOK_SPLIT_TO_TABLE-Transformation

Teradata

Abfrage

SELECT outkey, tokennum, token FROM table(STRTOK_SPLIT_TO_TABLE(strtokTable.col1, strtokTable.col2, '-$')
RETURNS (outkey INTEGER, tokennum INTEGER, token VARCHAR(100))) AS testTable
ORDER BY outkey, tokennum;
Copy

Ergebnis

outkey |tokennum | token  |
-------+---------+--------+
1      |1        |string  |
-------+---------+--------+
1      |2        |split   |
-------+---------+--------+
1      |3        |by      |
-------+---------+--------+
1      |4        |dollars |
-------+---------+--------+
4      |1        |hello   |
-------+---------+--------+
4      |2        |world   |
-------+---------+--------+
4      |3        |split   |
-------+---------+--------+
4      |4        |me      |
Copy
Snowflake

Abfrage

SELECT
CAST(strtokTable.col1 AS INTEGER) AS outkey,
CAST(INDEX AS INTEGER) AS tokennum,
CAST(VALUE AS VARCHAR) AS token
FROM
strtokTable,
table(STRTOK_SPLIT_TO_TABLE(strtokTable.col2, '-$')) AS testTable
ORDER BY outkey, tokennum;
Copy

Ergebnis

outkey |tokennum | token  |
-------+---------+--------+
1      |1        |string  |
-------+---------+--------+
1      |2        |split   |
-------+---------+--------+
1      |3        |by      |
-------+---------+--------+
1      |4        |dollars |
-------+---------+--------+
4      |1        |hello   |
-------+---------+--------+
4      |2        |world   |
-------+---------+--------+
4      |3        |split   |
-------+---------+--------+
4      |4        |me      |
Copy

Bekannte Probleme

Keine bekannten Probleme.

Zugehörige EWIs

Keine zugehörigen EWIs.

SUBSTRING

Beschreibung

Extrahiert eine Teilzeichenfolge aus einer gegebenen Eingabezeichenfolge. Weitere Informationen finden Sie unter SUBSTRING/SUBSTR.

SUBSTRING(string_expr FROM n1 [FOR n2])

SUBSTR(string_expr, n1, [, n2])
Copy

Wenn der Wert, mit dem die Teilzeichenkette (n1) beginnen soll, kleiner als eins ist, wird stattdessen SUBSTR_UDF eingefügt.

Beispielhafte Quellcode-Muster

SUBSTRING-Transformation

Teradata

Abfrage

SELECT SUBSTR('Hello World!', 2, 6),
SUBSTR('Hello World!', -2, 6),
SUBSTRING('Hello World!' FROM 2 FOR 6),
SUBSTRING('Hello World!' FROM -2 FOR 6);
Copy

Ergebnis

COLUMN1 |COLUMN2 |COLUMN3 | COLUMN4 |
--------+--------+--------+---------+
ello W  |Hel     |ello W  |Hel      |
Copy
Snowflake

Abfrage

SELECT
SUBSTR('Hello World!', 2, 6),
PUBLIC.SUBSTR_UDF('Hello World!', -2, 6),
SUBSTRING('Hello World!', 2, 6),
PUBLIC.SUBSTR_UDF('Hello World!', -2, 6);
Copy

Ergebnis

COLUMN1 |COLUMN2 |COLUMN3 | COLUMN4 |
--------+--------+--------+---------+
ello W  |Hel     |ello W  |Hel      |
Copy

Zugehörige EWIs

Keine zugehörigen EWIs.

TD_UNPIVOT

Übersetzungsspezifikation für die Transformation von TD_UNPIVOT in eine entsprechende Abfrage in Snowflake

Bemerkung

Einige Teile des Ausgabecodes wurden aus Gründen der Übersichtlichkeit weggelassen.

Beschreibung

TD_UNPIVOT in Teradata kann mehrere Spalten auf einmal entpivotieren, während UNPIVOT in Snowflake nur eine einzelne Spalte entpivotieren kann**.** Die Funktion unpivot wird verwendet, um Spalten der angegebenen Tabelle in Zeilen umzuwandeln. Weitere Informationen finden Sie unter TD_UNPIVOT.

[TD_SYSFNLIB.] TD_UNPIVOT (
  ON { tableName | ( query_expression ) }
  USING VALUE_COLUMNS ( 'value_columns_value' [,...] )
  UNPIVOT_COLUMN ( 'unpivot_column_value' )
  COLUMN_LIST ( 'column_list_value' [,...] )
  [ COLUMN_ALIAS_LIST ( 'column_alias_list_value' [,...] )
      INCLUDE_NULLS ( { 'No' | 'Yes' } )
  ]
)

Copy

Die folgende Transformation ist in der Lage, eine SQL Abfrage in Snowflake zu generieren, die mehrere Spalten gleichzeitig entpivotiert, so wie es auch in Teradata funktioniert.

Beispielhafte Quellcode-Muster

Titel Datenkonfiguration

Teradata
Abfrage
 CREATE TABLE superunpivottest (
	myKey INTEGER NOT NULL PRIMARY KEY,
	firstSemesterIncome DECIMAL(10,2),
	secondSemesterIncome DECIMAL(10,2),
	firstSemesterExpenses DECIMAL(10,2),
	secondSemesterExpenses DECIMAL(10,2)
);

INSERT INTO superUnpivottest VALUES (2020, 15440, 25430.57, 10322.15, 12355.36);
INSERT INTO superUnpivottest VALUES (2018, 18325.25, 25220.65, 15560.45, 15680.33);
INSERT INTO superUnpivottest VALUES (2019, 23855.75, 34220.22, 14582.55, 24122);
Copy
Snowflake
Abfrage
 CREATE OR REPLACE TABLE superunpivottest (
	myKey INTEGER NOT NULL PRIMARY KEY,
	firstSemesterIncome DECIMAL(10,2),
	secondSemesterIncome DECIMAL(10,2),
	firstSemesterExpenses DECIMAL(10,2),
	secondSemesterExpenses DECIMAL(10,2)
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO superUnpivottest
VALUES (2020, 15440, 25430.57, 10322.15, 12355.36);

INSERT INTO superUnpivottest
VALUES (2018, 18325.25, 25220.65, 15560.45, 15680.33);

INSERT INTO superUnpivottest
VALUES (2019, 23855.75, 34220.22, 14582.55, 24122);
Copy

TD_UNPIVOT-Transformation

Teradata
Abfrage
 SELECT * FROM
 TD_UNPIVOT(
 	ON superunpivottest
 	USING
 	VALUE_COLUMNS('Income', 'Expenses')
 	UNPIVOT_COLUMN('Semester')
 	COLUMN_LIST('firstSemesterIncome, firstSemesterExpenses', 'secondSemesterIncome, secondSemesterExpenses')
    COLUMN_ALIAS_LIST('First', 'Second')
 )X ORDER BY mykey, Semester;
Copy
Ergebnis
myKey |Semester |Income   | Expenses |
------+---------+---------+----------+
2018  |First    |18325.25 |15560.45  |
------+---------+---------+----------+
2018  |Second   |25220.65 |15680.33  |
------+---------+---------+----------+
2019  |First    |23855.75 |14582.55  |
------+---------+---------+----------+
2019  |Second   |34220.22 |24122.00  |
------+---------+---------+----------+
2020  |First    |15440.00 |10322.15  |
------+---------+---------+----------+
2020  |Second   |25430.57 |12355.36  |


Copy
Snowflake
Abfrage
 SELECT
 * FROM
 !!!RESOLVE EWI!!! /*** SSC-EWI-TD0061 - TD_UNPIVOT TRANSFORMATION REQUIRES COLUMN INFORMATION THAT COULD NOT BE FOUND, COLUMNS MISSING IN RESULT ***/!!!
 (
  SELECT
   TRIM(GET_IGNORE_CASE(OBJECT_CONSTRUCT('FIRSTSEMESTERINCOME', 'First', 'FIRSTSEMESTEREXPENSES', 'First', 'SECONDSEMESTERINCOME', 'Second', 'SECONDSEMESTEREXPENSES', 'Second'), Semester), '"') AS Semester,
   Income,
   Expenses
  FROM
   superunpivottest UNPIVOT(Income FOR Semester IN (
    firstSemesterIncome,
    secondSemesterIncome
   )) UNPIVOT(Expenses FOR Semester1 IN (
    firstSemesterExpenses,
    secondSemesterExpenses
   ))
  WHERE
   Semester = 'FIRSTSEMESTERINCOME'
   AND Semester1 = 'FIRSTSEMESTEREXPENSES'
   OR Semester = 'SECONDSEMESTERINCOME'
   AND Semester1 = 'SECONDSEMESTEREXPENSES'
 ) X ORDER BY mykey, Semester;
Copy
Ergebnis
myKey |Semester |Income   | Expenses |
------+---------+---------+----------+
2018  |First    |18325.25 |15560.45  |
------+---------+---------+----------+
2018  |Second   |25220.65 |15680.33  |
------+---------+---------+----------+
2019  |First    |23855.75 |14582.55  |
------+---------+---------+----------+
2019  |Second   |34220.22 |24122.00  |
------+---------+---------+----------+
2020  |First    |15440.00 |10322.15  |
------+---------+---------+----------+
2020  |Second   |25430.57 |12355.36  |

Copy

Bekannte Probleme

  1. TD_UNPIVOT mit INCLUDE_NULLS-Klausel auf YES gesetzt wird nicht unterstützt

Die Snowflake UNPIVOT-Funktion, die in der Transformation verwendet wird, ignoriert immer Nullwerte, und der Benutzer wird gewarnt, dass die INCLUDE_NULLS-Klausel nicht unterstützt wird, wenn sie auf YES gesetzt ist.

  1. Die Tabelleninformationen werden benötigt, um die Funktion korrekt zu transformieren

SnowConvert AI benötigt die Namen der Spalten, die in der TD_UNPIVOTFunktion verwendet werden; wenn Benutzende die Spaltenliste nicht in den Abfrageausdruck der Funktion aufnehmen, aber den Namen der Tabelle angeben, die nicht pivotiert wurde, wird versucht, die Spaltennamen aus der Tabellendefinition abzurufen. Wenn die Namen nicht gefunden werden können, werden Benutzende gewarnt, dass die resultierende Abfrage möglicherweise Spalten im Ergebnis verliert.

Zugehörige EWIs

  1. SSC-EWI-TD0061: Die TD_UNPIVOT-Transformation erfordert Spalteninformationen, die nicht gefunden werden konnten; Spalten fehlen im Ergebnis.

TO_CHAR

Beschreibung

Die Funktion TO_CHAR wandelt einen DateTime- oder numerischen Wert in eine Zeichenfolge um. Weitere Informationen finden Sie unter TO_CHAR(Numeric) und TO_CHAR(DateTime).

-- Numeric version
[TD_SYSFNLIB.]TO_CHAR(numeric_expr [, format_arg [, nls_param]])

-- DateTime version
[TD_SYSFNLIB.]TO_CHAR(dateTime_expr [, format_arg])
Copy

Sowohl Snowflake als auch Teradata haben ihre eigene Version der TO_CHAR-Funktion, Teradata unterstützt jedoch viele Formate, die von Snowflake nicht nativ unterstützt werden. Zur Unterstützung dieser Formatelemente verwendet SnowConvert AI in Snowflake integrierte Funktionen und benutzerdefinierte UDFs, um einen Verkettungsausdruck zu generieren, der dieselbe Zeichenfolge wie die ursprüngliche TO_CHAR-Funktion in Teradata erzeugt.

Beispielhafte Quellcode-Muster

TO_CHAR(DateTime)-Transformation

Teradata

Abfrage

SELECT 
TO_CHAR(date '2012-12-23'),
TO_CHAR(date '2012-12-23', 'DS'),
TO_CHAR(date '2012-12-23', 'DAY DD, MON YY');
Copy

Ergebnis

COLUMN1    | COLUMN2    | COLUMN3           |
-----------+------------+-------------------+
2012/12/23 | 12/23/2012 | SUNDAY 23, DEC 12 |
Copy
Snowflake

Abfrage

SELECT
TO_CHAR(date '2012-12-23') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/,
TO_CHAR(date '2012-12-23', 'MM/DD/YYYY') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/,
PUBLIC.DAYNAME_LONG_UDF(date '2012-12-23', 'uppercase') || TO_CHAR(date '2012-12-23', ' DD, ') || PUBLIC.MONTH_SHORT_UDF(date '2012-12-23', 'uppercase') || TO_CHAR(date '2012-12-23', ' YY') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/;
Copy

Ergebnis

COLUMN1    | COLUMN2    | COLUMN3           |
-----------+------------+-------------------+
2012/12/23 | 12/23/2012 | SUNDAY 23, DEC 12 |
Copy

TO_CHAR(Numeric)-Transformation

Teradata

Abfrage

SELECT
TO_CHAR(1255.495),
TO_CHAR(1255.495, '9.9EEEE'),
TO_CHAR(1255.495, 'SC9999.9999', 'nls_iso_currency = ''EUR''');
Copy

Ergebnis

COLUMN1  | COLUMN2 | COLUMN3       |
---------+---------+---------------+
1255.495 | 1.3E+03 | +EUR1255.4950 |
Copy
Snowflake

Abfrage

SELECT
TO_CHAR(1255.495) /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/,
TO_CHAR(1255.495, '9.0EEEE') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/,
PUBLIC.INSERT_CURRENCY_UDF(TO_CHAR(1255.495, 'S9999.0000'), 2, 'EUR') /*** SSC-FDM-TD0029 - SNOWFLAKE SUPPORTED FORMATS FOR TO_CHAR DIFFER FROM TERADATA AND MAY FAIL OR HAVE DIFFERENT BEHAVIOR ***/;
Copy

Ergebnis

COLUMN1  | COLUMN2 | COLUMN3       |
---------+---------+---------------+
1255.495 | 1.3E+03 | +EUR1255.4950 |
Copy

Bekannte Probleme

1. Formate mit unterschiedlichen oder nicht unterstützten Verhaltensweisen

Teradata bietet eine umfangreiche Liste von Formatelementen, die nach der Transformation der TO_CHAR-Funktion ein anderes Verhalten in Snowflake zeigen können. Die Liste der Elemente mit unterschiedlichen oder nicht unterstützten Verhaltensweisen finden Sie unter SSC-EWI-TD0029.

Zugehörige EWIs

  1. SSC-FDM-TD0029: Von Snowflake unterstützte Formate für TO_CHAR unterscheiden sich von Teradata und können fehlschlagen oder ein anderes Verhalten aufweisen.

XMLAGG

Beschreibung

Erstellen Sie einen XML-Wert, indem Sie eine Aggregation mehrerer Zeilen durchführen. Weitere Informationen dazu finden Sie unter XMLAGG.

XMLAGG (
  XML_value_expr
  [ ORDER BY order_by_spec [,...] ]
  [ RETURNING { CONTENT | SEQUENCE } ]
)

order_by_spec := sort_key [ ASC | DESC ] [ NULLS { FIRST | LAST } ]
Copy

Beispielhafte Quellcode-Muster

Datenkonfiguration

Teradata

Abfrage

create table orders (
	o_orderkey int, 
	o_totalprice float);

insert into orders values (1,500000);
insert into orders values (2,100000);
insert into orders values (3,600000);
insert into orders values (4,700000);
Copy
Snowflake

Abfrage

CREATE OR REPLACE TABLE orders (
	o_orderkey int,
	o_totalprice float)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"teradata"}}'
;

INSERT INTO orders
VALUES (1,500000);

INSERT INTO orders
VALUES (2,100000);

INSERT INTO orders
VALUES (3,600000);

INSERT INTO orders
VALUES (4,700000);
Copy

XMLAGG-Transformation

Teradata

Abfrage

select 
    xmlagg(o_orderkey order by o_totalprice desc) (varchar(10000))
from orders
where o_totalprice > 5;
Copy

Ergebnis

COLUMN1 |
--------+
4 3 1 2 |
Copy
Snowflake

Abfrage

SELECT
    LEFT(TO_VARCHAR(LISTAGG ( o_orderkey, ' ')
    WITHIN GROUP(
 order by o_totalprice DESC NULLS LAST)), 10000)
    from
    orders
    where o_totalprice > 5;
Copy

Ergebnis

COLUMN1 |
--------+
4 3 1 2 |
Copy

Bekannte Probleme

1. Die RETURNING-Klausel wird derzeit nicht unterstützt.

Der Benutzer wird gewarnt, dass die Übersetzung der RETURNING-Klausel in Zukunft hinzugefügt wird.

Zugehörige EWIs

Keine zugehörigen EWIs.

CAST

Umwandlung von Zahlendatentypen in Varchar-Datentypen

Beim Umwandeln von Teradaten in Varchar werden Standardformate für jeden Zahlendatentyp verwendet. SnowConvert AI fügt daher Formate hinzu, um die Äquivalenz zwischen den Plattformen beizubehalten.

Beispielhafte Quellcode-Muster

BYTEINT

Teradata

Abfrage

SELECT '"'||cast(cast(12 as BYTEINT) as varchar(10))||'"';
Copy

Ergebnis

(('"'||12)||'"')|
----------------+
"12"            |
Copy
Snowflake

Abfrage

SELECT
'"'|| LEFT(TO_VARCHAR(cast(12 as BYTEINT), 'TM'), 10) ||'"';
Copy

Ergebnis

"'""'|| LEFT(TO_VARCHAR(CAST(12 AS BYTEINT), 'TM'), 10) ||'""'"
---------------------------------------------------------------
"12"            
Copy

SMALLINT

Teradata

Abfrage

SELECT '"'||cast(cast(123 as SMALLINT) as varchar(10))||'"';
Copy

Ergebnis

(('"'||123)||'"')|
-----------------+
"123"            |
Copy
Snowflake

Abfrage

SELECT
'"'|| LEFT(TO_VARCHAR(CAST(123 AS SMALLINT), 'TM'), 10) ||'"';
Copy

Ergebnis

"'""'|| LEFT(TO_VARCHAR(CAST(123 AS SMALLINT), 'TM'), 10) ||'""'"
-----------------------------------------------------------------
"123"

INTEGER

Teradata

Abfrage

SELECT '"'||cast(cast(12345 as INTEGER) as varchar(10))||'"';
Copy

Ergebnis

(('"'||12345)||'"')|
-------------------+
"12345"            |
Copy
Snowflake

Abfrage

SELECT
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS INTEGER), 'TM'), 10) ||'"';
Copy

Ergebnis

"'""'|| LEFT(TO_VARCHAR(CAST(12345 AS INTEGER), 'TM'), 10) ||'""'"
------------------------------------------------------------------
"12345"
Copy

BIGINT

Teradata

Abfrage

SELECT '"'||cast(cast(12345 as BIGINT) as varchar(10))||'"';
Copy

Ergebnis

(('"'||12345)||'"')|
-------------------+
"12345"            |
Copy
Snowflake

Abfrage

SELECT
       '"'|| LEFT(TO_VARCHAR(CAST(12345 AS BIGINT), 'TM'), 10) ||'"';
Copy

Ergebnis

"'""'|| LEFT(TO_VARCHAR(CAST(12345 AS BIGINT), 'TM'), 10) ||'""'"
-----------------------------------------------------------------
"12345"
Copy

DECIMAL[(n[,m])] oder NUMERIC[(n[,m])]

Teradata

Abfrage

SELECT '"'||cast(cast(12345 as DECIMAL) as varchar(10))||'"',
       '"'||cast(cast(12345 as DECIMAL(12, 2)) as varchar(10))||'"';
Copy

Ergebnis

(('"'||12345)||'"')|(('"'||12345)||'"')|
-------------------+-------------------+
"12345."           |"12345.00"         |
Copy
Snowflake

Abfrage

SELECT
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL), 'TM.'), 10) ||'"',
'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL(12, 2)), 'TM'), 10) ||'"';
Copy

Ergebnis

'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL), 'TM.'), 10) ||'"'	'"'|| LEFT(TO_VARCHAR(CAST(12345 AS DECIMAL(12, 2)), 'TM'), 10) ||'"'
"12345."	"12345.00"    

Bekannte Probleme

  • Teradata behandelt die Zahlen zwischen 0 und 1 anders als Snowflake. Für diese Werte fügt Teradata die Null vor dem Punkt nicht hinzu, während Snowflake dies tut.

Teradata

Abfrage

SELECT '"'||cast(cast(-0.1 as DECIMAL(12, 2)) as varchar(10))||'"' AS column1,
       '"'||cast(cast(0.1 as DECIMAL(12, 2)) as varchar(10))||'"' AS column2;
Copy

Ergebnis

COLUMN1          |COLUMN2
-----------------+--------------+
"-.10"           |".10"         |
Copy

Snowflake

Abfrage

SELECT
'"'|| LEFT(TO_VARCHAR(CAST(-0.1 AS DECIMAL(12, 2)), 'TM'), 10) ||'"' AS column1,
'"'|| LEFT(TO_VARCHAR(CAST(0.1 AS DECIMAL(12, 2)), 'TM'), 10) ||'"' AS column2;
Copy

Ergebnis

COLUMN1           |COLUMN2
------------------+---------------+
"-0.10"           |"0.10"         |
Copy

Zugehörige EWIs

Keine zugehörigen EWIs.

Umwandlung in DATE mit { }

Beschreibung

Die folgende Syntax wandelt eine datumsformatierte Zeichenfolge in den Datentyp DATE um, indem Sie ein d vor die Zeichenfolgendefinition in geschweiften Klammern setzen.

SELECT {d '1233-10-10'}
Copy

Beispielhafte Quellcode-Muster

Umwandlung in DATE mit geschweiften Klammern

Teradata

Cast to Date

SELECT * FROM RESOURCE_DETAILS where change_ts >= {d '2022-09-10'};
Copy

Snowflake

Cast to Date

SELECT
* FROM
PUBLIC.RESOURCE_DETAILS
where change_ts >= DATE('2022-09-10');
Copy

Umwandlung in INTERVAL-Datentyp

Beschreibung

Snowflake unterstützt den Datentyp „Interval“ nicht, verfügt aber über INTERVAL-Konstanten, die in DateTime-Operationen verwendet werden können und andere Verwendungen können mit VARCHAR emuliert werden. SnowConvert AI transformiert CAST-Funktionen für den INTERVAL-Datentyp je nach Fall in ein entsprechendes Äquivalent:

  • Wenn der umgewandelte Wert vom Typ Intervall ist, wird eine UDF generiert, die das neue Intervalläquivalent als Zeichenfolge erzeugt

  • Wenn der Wert ein Literal ist, wird eine Snowflake-Intervallkonstante erzeugt, wenn die Umwandlung in einer Datetime-Operation verwendet wird, andernfalls wird eine Literal-Zeichenfolge erzeugt

  • Wenn der Wert nicht literal ist, wird eine Umwandlung in Zeichenfolge erzeugt

Beispielhafte Quellcode-Muster

Nicht-Intervall-Literale

Teradata

Abfrage

SELECT TIMESTAMP '2022-10-15 10:30:00' + CAST ('12:34:56.78' AS INTERVAL HOUR(2) TO SECOND(2)) AS VARCHAR_TO_INTERVAL,
TIMESTAMP '2022-10-15 10:30:00' + CAST(-5 AS INTERVAL YEAR(4)) AS NUMBER_TO_INTERVAL,
CAST('07:00' AS INTERVAL HOUR(2) TO MINUTE) AS OUTSIDE_DATETIME_OPERATION;
Copy

Ergebnis

VARCHAR_TO_INTERVAL | NUMBER_TO_INTERVAL | OUTSIDE_DATETIME_OPERATION |
--------------------+--------------------+----------------------------+
2022-10-15 23:04:56 |2017-10-15 10:30:00 | 7:00                       |
Copy
Snowflake

Abfrage

SELECT
TIMESTAMP '2022-10-15 10:30:00' + INTERVAL '12 HOUR, 34 MINUTE, 56 SECOND, 780000 MICROSECOND' AS VARCHAR_TO_INTERVAL,
TIMESTAMP '2022-10-15 10:30:00' + INTERVAL '-5 YEAR' AS NUMBER_TO_INTERVAL,
'07:00' AS OUTSIDE_DATETIME_OPERATION;
Copy

Ergebnis

VARCHAR_TO_INTERVAL     | NUMBER_TO_INTERVAL     | OUTSIDE_DATETIME_OPERATION |
------------------------+------------------------+----------------------------+
2022-10-15 23:04:56.780 |2017-10-15 10:30:00.000 | 07:00                      |
Copy

Werte von Nicht-Literalen und Nicht-Intervallen

Teradata

Abfrage

SELECT TIMESTAMP '2022-10-15 10:30:00' + CAST('20 ' || '10' AS INTERVAL DAY TO HOUR) AS DATETIME_OPERATION,
CAST('20 ' || '10' AS INTERVAL DAY TO HOUR) AS OUTSIDE_DATETIME_OPERATION;
Copy

Ergebnis

DATETIME_OPERATION  | OUTSIDE_DATETIME_OPERATION |
--------------------+----------------------------+
2022-11-04 20:30:00 | 20 10                      |
Copy
Snowflake

Abfrage

SELECT
PUBLIC.DATETIMEINTERVALADD_UDF(TIMESTAMP '2022-10-15 10:30:00', CAST('20 ' || '10' AS VARCHAR(21)), 'DAY', '+') AS DATETIME_OPERATION,
CAST('20 ' || '10' AS VARCHAR(21)) AS OUTSIDE_DATETIME_OPERATION;
Copy

Ergebnis

DATETIME_OPERATION      | OUTSIDE_DATETIME_OPERATION |
------------------------+----------------------------+
2022-11-04 20:30:00.000 | 20 10                      |
Copy

Besetzung eines Intervalls mit einem anderen Intervall

Teradata

Abfrage

SELECT
TIMESTAMP '2022-10-15 10:30:00' + CAST(INTERVAL '5999' MINUTE AS INTERVAL DAY TO HOUR) AS DATETIME_OPERATION,
CAST(INTERVAL '5999' MINUTE AS INTERVAL DAY TO HOUR) AS OUTSIDE_DATETIME_OPERATION;
Copy

Ergebnis

DATETIME_OPERATION  | OUTSIDE_DATETIME_OPERATION |
--------------------+----------------------------+
2022-10-19 13:30:00 | 4 03                       |
Copy
Snowflake

Abfrage

SELECT
PUBLIC.DATETIMEINTERVALADD_UDF(
TIMESTAMP '2022-10-15 10:30:00', PUBLIC.INTERVALTOINTERVAL_UDF('5999', 'MINUTE', 'MINUTE', 'DAY', 'HOUR'), 'DAY', '+') AS DATETIME_OPERATION,
PUBLIC.INTERVALTOINTERVAL_UDF('5999', 'MINUTE', 'MINUTE', 'DAY', 'HOUR') AS OUTSIDE_DATETIME_OPERATION;
Copy

Ergebnis

DATETIME_OPERATION      | OUTSIDE_DATETIME_OPERATION |
------------------------+----------------------------+
2022-10-19 13:30:00.000 | 4 03                       |
Copy

Bekannte Probleme

Keine bekannten Probleme.

Zugehörige EWIs

Keine zugehörigen EWIs.