SQL-Formatmodelle

In Snowflake, SQL format models (that is, literals containing format strings) are used to specify how numeric values are converted to text strings and vice versa. As such, they can be specified as arguments in the TO_CHAR , TO_VARCHAR and TO_DECIMAL , TO_NUMBER , TO_NUMERIC conversion functions.

Bemerkung

Snowflake bietet auch eine eingeschränkte Unterstützung des SQL-Formatmodells für Datumsangaben, Zeitangaben und Zeitstempel (siehe Datums- und Uhrzeitfunktionen und Konvertierungsfunktionen). In einer zukünftigen Version wird die vollständige Unterstützung für die Verwendung von SQL-Formatmodellen zum Formatieren von Datum, Uhrzeit und Zeitstempel hinzugefügt.

Komponenten eines Formatmodells

Ein Formatmodell besteht aus einer Zeichenfolge von Formatelementen und -literalen.

Formatelemente

Formatelemente sind Ziffern- und/oder Buchstabenfolgen (meist ohne Berücksichtigung von Groß- und Kleinschreibung) und in einigen Fällen auch Symbole. Formatelemente können direkt miteinander verkettet werden.

Einige Formatelemente werden häufig in allen Formatmodellen verwendet, um die Ausgabe zu steuern und den Eingabetext abzugleichen. Andere Formatelemente haben bestimmte Verwendungen, die auf dem Wertetyp basieren, in den/aus dem sie umgewandelt werden. Weitere Informationen finden Sie in den folgenden Abschnitten dieses Themas:

Formatliterale

Formatliterale sind Sequenzen, die aus folgenden Kombinationen bestehen können:

  • Zeichenfolgen beliebiger Zeichen, die durch doppelte Anführungszeichen getrennt sind (ein doppeltes Anführungszeichen wird durch zwei nebeneinander liegende doppelte Anführungszeichen dargestellt).

  • Eines oder mehrere der folgenden Symbole:

    Symbol/Zeichen

    Anmerkungen

    . (Punkt)

    Wird in festen numerischen Modellen als Formatelement behandelt, wenn das Zeichen auf 0, 9 oder X folgt; ansonsten bleibt es erhalten, wie es ist.

    , (Komma)

    Wird in numerischen Modellen als Formatelement behandelt, wenn das Zeichen auf 0, 9 oder X folgt; ansonsten bleibt es erhalten, wie es ist.

    ; (Semikolon)

    Bleibt immer erhalten, wie es ist.

    : (Doppelpunkt)

    Bleibt immer erhalten, wie es ist.

    - (Minuszeichen)

    Bleibt immer erhalten, wie es ist.

    = (Gleichheitszeichen)

    Bleibt immer erhalten, wie es ist.

    / (Schrägstrich)

    Bleibt immer erhalten, wie es ist.

    ( (linke Klammer)

    Bleibt immer erhalten, wie es ist.

    ) (rechte Klammer)

    Bleibt immer erhalten, wie es ist.

Ein Literal wird immer so ausgegeben, wie es ist, und genau dort, wo es sich im Formatmodell befand.

Hier ein kurzes Beispiel für die Verwendung eines Modells im SQL-Format, um das Minuszeichen nach einer Zahl und nicht vor einer Zahl auszugeben. Das MI gibt an, wo das Minuszeichen gesetzt werden soll, wenn die Zahl eine negative Zahl ist.

select to_varchar(-123.45, '999.99MI') as EXAMPLE;
Copy

Die Ausgabe würde 123.45- und nicht dem Standard -123.45 ähneln.

Weitere Beispiele finden Sie am Ende dieses Themas.

Formatmodifizierer und generische Leerzeichenverwaltung

In der folgenden Tabelle sind spezielle Formatelemente aufgeführt, die die Ausgabe und die Übereinstimmung von Eingabetext steuern und für alle Formatmodelle gelten:

Element

Beschreibung

_ (Unterstrich)

Nichts wird ausgegeben; optionales Leerzeichen bei der Eingabe.

FM

Füllmodusmodifikator; wechselt zwischen den Modi compact und fill für alle Elemente, die im Modell auf den Modifikator folgen.

FX

Modifikator für genaue Übereinstimmung; wechselt zwischen den Übereinstimmungsmodi lax und exact für alle Elemente, die im Modell auf den Modifikator folgen.

Bemerkung

Der Füllmodusmodifikator hat keine Auswirkungen auf die Elemente des textminimalen numerischen Formats (TM, TM9 und TME).

Ausgabezeichenfolgen mit dem Füllmodusmodifikator ausgeben

Standardmäßig ist der Füllmodus auf fill gesetzt, und der Füllmodusmodifikator FM schaltet ihn auf compact um. Bei erneuter Verwendung wird er zurück auf fill geschaltet usw.

In den meisten Fällen gewährleistet der fill-Modus bei der Ausgabe, dass Formatelemente eine Ausgabe mit fester Breite erzeugen, indem Sie die Zahlen links mit führenden Nullen oder Leerzeichen und den Text rechts mit Leerzeichen auffüllen. Dies garantiert, dass die spaltenweise Ausgabe bei Schriftarten mit fester Breite angepasst wird.

In compact mode, most format elements produce only minimum-width output (that is, leading zeros and spaces and trailing spaces are suppressed).

Die Formatelemente, die diesen Regeln nicht entsprechen, werden unten explizit angegeben.

Der Modifikator für genaue Übereinstimmung FX hat keinen Einfluss auf die Ausgabe. Das Unterstrichformatelement gibt nichts aus.

Parsen von Eingabezeichenfolgen mithilfe von Modifikatoren

Das Parsen von Eingabezeichenfolgen wird sowohl vom Füllmodusmodifikator FM als auch vom Modifikator für genaue Übereinstimmung FX beeinflusst. Anfänglich:

  • Der Füllmodus ist auf fill eingestellt, und FM schaltet ihn auf compact und zurück.

  • Der Modus für genaue Übereinstimmung ist auf lax eingestellt, und FX schaltet ihn auf exact und zurück.

Beim Abgleich von Zeichenfolgen mit Formatelementen und Literalen während der Analyse wird die Groß- und Kleinschreibung nicht berücksichtigt.

Im lax-Modus überspringt der erste Schritt des Eingabeparsings führende Leerzeichen (eine Sequenz von Leerzeichen, Tabulatoren, LF, CR, FF und VT Zeichen); der Modus am Anfang der Eingabe ist genau, wenn das erste Formatelement FX ist, ansonsten ist er lax.

Bemerkung

Only normal space characters are allowed within values to be parsed (that is, components cannot be on different lines, separated by tabs, etc.).

Im lax-Übereinstimmungmodus werden Leerzeichen in Literalen mit einer nicht leeren Eingabefolge von Leerzeichen verglichen. Nicht-Leerzeichen werden eins zu eins abgeglichen. Im exact-Modus müssen alle Zeichen in einem Literal eins zu eins mit den eingegebenen Zeichen übereinstimmen.

Die numerischen Formatelemente werden mit den entsprechenden Ziffernfolgen abgeglichen:

  • Wenn sowohl der fill als auch der exact-Modus aktiviert sind, muss die Anzahl der Stellen genau der Breite der entsprechenden numerischen Formatelemente entsprechen (führende Nullen werden erwartet).

  • Wenn der compact- oder lax-Modus aktiv ist, darf eine übereinstimmende Eingabezahl höchstens die Anzahl der Ziffern haben, die der maximalen Breite des Formatelements entspricht, und mindestens eine Ziffer; führende Nullen werden ignoriert.

Die Elemente des Textformats werden unabhängig von der Groß- und Kleinschreibung abgeglichen:

  • Wenn sowohl der fill- als auch der exact-Modus aktiviert sind, wird die Anzahl der nachstehenden Leerzeichen bis zur maximalen Breite des Elements erwartet.

  • Ansonsten werden Leerzeichen nach den Textelementen mit variabler Länge im lax-Modus ignoriert, und eine genaue Übereinstimmung mit dem tatsächlichen Wort (ohne Leerzeichen) wird im exact-Modus erwartet.

Schließlich wird das nachstehende Leerzeichen bis zum Ende der Eingabezeichenfolge ignoriert, wenn der lax-Modus aktuell aktiviert ist.

Normalerweise erlauben weder der lax- noch der exact-Modus übereinstimmende Leerzeichen, wenn Leerzeichen im Formatmodell nicht vorhanden sind oder durch Ausgabe des Inhalts von Formatelementen im fill-Modus nicht erzeugt werden konnten.

Bemerkung

Dieses Verhalten unterscheidet sich von der „lax“-Übereinstimmungssemantik von Oracle, bei der Leerzeichen zwischen zwei Formatelementen eingefügt werden können. Snowflake verwendet eine strengere Übereinstimmungssemantik, um übermäßige falsche Übereinstimmungen bei der automatischen Datentyperkennung zu vermeiden.

Stellen, an denen Leerzeichen ignoriert werden sollten, wenn sie sowohl im fill- als auch im exact-Modus vorhanden sind, können mit dem Formatelement _ (Unterstrich) explizit markiert werden.

Als Faustregel gilt, dass ein Format im exact-Modus nur Eingabezeichenfolgen erkennt, die im gleichen Format ausgegeben wurden, während ein Format im lax-Modus Eingabezeichenfolgen erkennt, die in einem ähnlichen Format ausgegeben wurden, wobei beliebige Füllmodusmodifikatoren hinzugefügt oder entfernt wurden.

Numerische Formatmodelle

Numerische Formatmodelle unterstützen zwei Typen:

  • Feste Position (mit expliziter Platzierung von Ziffern, in denen die Formatelemente 0, 9 oder X platziert sind)

  • Textminimal (Formatelemente TM, TME und TM9)

Bemerkung

Diese beiden Typen können nicht im selben Modell vermischt werden.

Numerische Formate mit fester Position

Bemerkung

In diesem Abschnitt werden nicht negative Festpositionsnummern beschrieben. Weitere Informationen zur Positionierung eines Vorzeichens einer Zahl in der Ausgabe für numerische Formate mit fester Position finden Sie unter Zeichenposition für Formate mit fester Position.

Zahlen mit fester Position werden durch Ziffernelemente 0 oder 9 dargestellt. Beispielsweise enthält 999 Zahlen mit 1 bis 3 Dezimalstellen. Der Bruchteil der Zahlen wird durch die Trennzeichen . (Punkt) oder D begrenzt:

  • . wird immer als Punkt dargestellt.

  • Um ein anderes Zeichen für die D-Elemente zu verwenden, ändern Sie die Eingabezeichenfolge, um alle Punkte durch Kommas und alle Kommas durch Punkte zu ersetzen, bevor Sie die Übertragungsfunktion anwenden.

Normally, the leading zeros in the integer part and trailing zeros in the fractional part are replaced with spaces (except when the value of the integer part is zero, in which case it is rendered as a single 0 character). To suppress this behavior use the 0 format element in place of 9; the corresponding positions have 0 characters preserved. The format element B, when used before the number, suppresses preserving the last 0 in the integer value (that is, if you use B and the value of the integer part of the number is zero, all digits are rendered as spaces).

Das Zifferngruppentrennzeichen , (Komma) oder G bewirkt, dass das entsprechende Gruppentrennzeichen ausgegeben wird, wenn die Zahl groß genug ist, sodass sich die Ziffern auf beiden Seiten des Gruppentrennzeichens befinden. Ein Beispiel für ein Formatmodell, das zur Ausgabe von Währungssummen nützlich ist, wäre 999,999.00.

Wenn der ganzzahlige Teil der Zahl mehr Ziffern enthält als das Format Ziffernpositionen enthält, werden alle Ziffern als # ausgegeben, um einen Überlauf anzuzeigen.

Das Exponentenelement bewirkt, dass Zahlen mit fester Position normalisiert werden, sodass die erste Ziffer im ganzzahligen Teil 1 bis 9 ist (es sei denn, der Wert der Zahl ist Null; in diesem Fall ist der Wert des Exponenten ebenfalls Null). Das Element EE wählt automatisch die richtige Anzahl von Ziffern im Exponenten aus und gibt das +-Zeichen nicht aus, während EEE, EEEE und EEEEE immer das +- oder --Zeichen und die angeforderte Anzahl von Ziffern für den Exponenten ausgeben (führende Nullen werden nicht unterdrückt). Der Exponentenüberlauf wird durch # anstelle von Ziffern angezeigt.

Die Exponentenindikatoren geben je nach Groß- und Kleinschreibung des ersten Buchstabens im Formatelement entweder E oder e aus.

Das Formatelement X funktioniert wie 9, nur dass Hexadezimalziffern 0-9A-F ausgegeben werden. Hexadezimalbrüche werden derzeit nicht unterstützt. Ähnlich wie 9 ersetzt X führende Nullen durch Leerzeichen. Wenn das Element 0 zusammen mit X verwendet wird, werden hexadezimale Ziffern ohne Unterdrückung der führenden Nullen ausgegeben (verwenden Sie also 000X, um Hex-Zahlen zu auszugeben, die immer 4 Ziffern enthalten).

Beachten Sie, dass X hexadezimale Ziffern mit lateinischen Großbuchstaben ausgibt und x lateinische Kleinbuchstaben. Das hexadezimale 0 verwendet den Fall des nachfolgenden Formatelements X.

Normally, hexadecimal numbers are printed as unsigned, that is, negative numbers have all 1’s in the most significant bit(s), but using the X element together with an explicit sign (S or MI) causes the - sign to be printed along with the absolute value of the number.

Modelle für numerische Formate mit fester Position melden einen Überlauf bei speziellen Werten (unendlich oder keine Zahl) von Gleitkommazahlen.

Formatelemente mit fester Position

In der folgenden Tabelle sind die unterstützten Elemente für Formate mit fester Position aufgeführt. Beachten Sie Folgendes:

  • Die Spalte Wiederholbar gibt an, ob ein Element in einem Formatmodell wiederholt werden kann. Andernfalls kann das Element nur einmal pro Formatmodell verwendet werden.

  • Die Spalte Groß- / Kleinschreibung kennzeichnet Elemente, bei denen die Groß- und Kleinschreibung des Elements das Format beeinflusst. Beispiel:

    • EE verarbeitet Exponenten mit einem großgeschriebenen E.

    • ee verarbeitet Exponenten mit einem kleingeschriebenen e.

    Bei allen anderen Elementen wird die Groß- und Kleinschreibung nicht berücksichtigt.

Element

Wiederholbar

Zwischen Groß- und Kleinschreibung wird unterschieden

Beschreibung

$

Dollarzeichen wird vor den Ziffern in der Zahl ausgegeben (normalerweise nach dem Zeichen).

. (Punkt)

Dezimalbruchtrennzeichen; immer als Punkt ausgegeben.

, (Komma)

Zifferngruppentrennzeichen; als Komma oder Leerzeichen ausgegeben.

0

Position einer Ziffer; führende/nachstehende Nullen werden explizit ausgegeben.

9

Position einer Ziffer; führende/nachstehende Nullen werden durch Leerzeichen ersetzt.

B

Erzwingt, dass ein Nullwert als Leerzeichen in der nachfolgenden Zahl dargestellt wird.

D

Dezimalbruchtrennzeichen; Alternative für das Element . (siehe Beschreibung oben).

EE

Variable-width exponent, from 2 to 7 characters, with no + sign for integers (for example, E0, E21, E200, E-200).

EEE

Exponent mit fester Breite (3 Zeichen); der Bereich erstreckt sich von E-9 bis E+9.

EEEE

Exponent mit fester Breite (4 Zeichen); der Bereich erstreckt sich von E-99 bis E+99.

EEEEE

Fixed-width exponent (5 characters); range covers from E-999 to E+999.

EEEEEE

Fixed-width exponent (6 characters); range covers from E-9999 to E+9999.

EEEEEEE

Fixed-width exponent (7 characters); range covers from E-16383 to E+16384.

G

Zifferngruppentrennzeichen; Alternative für , (siehe Beschreibung oben).

MI

Expliziter Platzhalter für numerische Zeichen; gibt ein Leerzeichen für positive Zahlen oder ein --Zeichen für negative Zahlen aus.

S

Expliziter Platzhalter für numerische Zeichen; gibt ein +-Zeichen für positive Zahlen oder ein --Zeichen für negative Zahlen aus.

X

Hexadezimalziffer

Zeichenposition für Formate mit fester Position

Standardmäßig reservieren Formate mit fester Position immer ein Leerzeichen für das Zeichen der Zahl:

  • Bei nicht negativen Zahlen wird das Standardleerzeichen vor der ersten Ziffer ausgegeben.

  • Bei negativen Zahlen werden das Standardleerzeichen und das --Zeichen vor der ersten Ziffer (oder Dezimalzahl, wenn das Formatelement B für Bruchzahlen verwendet wird) ausgegeben.

Mit den Formatelementen S, MI und $ können Sie jedoch explizit angeben, wo sich das Vorzeichen und/oder Leerzeichen für die Nummer befinden.

Zum Beispiel (Unterstriche _ werden in diesen Beispielen verwendet, um anzugeben, wo Leerzeichen eingefügt werden):

Formatmodell

12 wird ausgegeben als:

-7 wird ausgegeben als:

99

_12

_-7

S99

+12

_-7

99S

12+

_7-

MI99

_12

-_7

99MI

12_

_7-

$99

_$12

_-$7

Ausgabe von Zahlen mithilfe von Formaten mit fester Position und dem Füllmodusmodifikator

Im fill-Modus werden die Formatelemente mit variabler Länge wie EE und MI rechts mit Leerzeichen aufgefüllt.

Im compact-Modus werden alle Leerzeichen, die sich aus numerischen Formatelementen ergeben, einschließlich der Elemente mit variabler Länge, entfernt, sodass die resultierenden Zeichenfolgen kürzer und nicht mehr ausgerichtet sind. Zum Beispiel (beachten Sie das Fehlen von Leerzeichen):

Formatmodell

12 wird ausgegeben als:

-7 wird ausgegeben als:

FM99

12

-7

Parsen von Zahlen mit Formaten mit fester Position und den Modifikatoren

Das Parsen von Zeichenfolgen, die Zahlen enthalten, ist von den Modifikatoren FX und FM betroffen:

  • Im lax-Modus:

    • Digit group separators are optional (that is, numbers with or without group separators match — though numbers of digits between respective group separators must match); it also permits + as a valid match for the MI format element.

    • Der lax-Modus deaktiviert nicht die Anforderung, dass Ziffern (auch führende oder nachstehende Nullen) vorhanden sein müssen, damit Elemente des Formats 0 übereinstimmen.

    • Leerzeichen zwischen dem führenden Zeichen und der ersten Ziffer sind im lax-Modus zulässig.

    • Im lax-Modus werden alle Exponentenformatelemente (EE, EEE, EEEE und EEEEE) als EE behandelt und entsprechen einer Exponentenspezifikation mit 1 bis 3 Ziffern und optional +- oder --Zeichen.

    • Verwenden Sie B, um übereinstimmende Zahlen ohne Ziffern im ganzzahligen Teil zuzulassen. Der Dezimalpunkt vor einem leeren Bruchteil ist im lax-Modus optional.

  • Im exact-Modus:

    • The number must have a proper number of spaces in place of omitted digits to match the format (that is, in fill mode, it is spaces and, in compact mode, it is a lack of spaces).

    • Das Auslassen von Gruppentrennzeichen ist im exact-Modus nicht zulässig, und MI stimmt nicht mit dem +-Zeichen überein.

    • Die Exponentenformatelemente mit Ausnahme von EE müssen mit der Zeichenstelle und der genauen Anzahl von Ziffern übereinstimmen, die für das Formatelement erforderlich sind.

    • Der Dezimalpunkt an der vom Formatmodell angegebenen Stelle ist obligatorisch.

Textminimale numerische Formate

Während numerische Formatmodelle mit fester Position immer explizit die Anzahl der Ziffern angeben, verwenden textminimale Formatelemente basierend auf dem Wert der Zahl eine minimale Anzahl von Ziffern. Die TM*-Formatelemente erzeugen unabhängig von dem Füllmodusmodifikator (fill oder compact) immer eine Ausgabe mit variabler Länge ohne Leerzeichen.

  • TM9 gibt die Zahl als Ganzzahl oder Dezimalbruch aus, basierend auf dem Wert der Zahl. Jeder dezimale Festkommazahlenwert wird genau mit der Anzahl der Nachkommastellen ausgegeben, die durch die Skalierung der Zahl bestimmt wird (nachstehende Nullen werden im fill-Modus beibehalten).

  • Bei Gleitkommazahlen wählt TM9 die Anzahl der Nachkommastellen basierend auf dem Exponenten der Zahl (beachten Sie, dass eine genaue Binär-Dezimalbruch-Umwandlung nicht möglich ist). Wenn die Größe der Gleitkommazahl zu groß ist und die Positionsnotation zu lang ist, wechselt sie zur wissenschaftlichen Notation (siehe TME unten). Wenn die Gleitkommazahl zu klein ist, gibt TM9 den Wert Null aus.

  • TME prints the number in scientific notation, that is, with exponent (same as EE) and one digit in the integer position of the fractional part. The case of the exponent indicator (E or e) matches the case of the first letter (T or t) in the format element.

  • TM wählt entweder TM9 oder TME in Abhängigkeit von der Größe der Zahl, um die Länge des Textes zu minimieren und dabei die Genauigkeit zu erhalten.

Textminimale Formatelemente

In der folgenden Tabelle sind die unterstützten Elemente für textminimale Formate aufgeführt. Beachten Sie Folgendes:

  • Innerhalb einer textminimalen Formatzeichenfolge können keine Elemente wiederholt werden.

  • Die Spalte Groß- / Kleinschreibung kennzeichnet Elemente, bei denen die Groß- und Kleinschreibung des Elements das Format beeinflusst. Beispiel:

    • TME verarbeitet Exponenten mit einem großgeschriebenen E.

    • tme verarbeitet Exponenten mit einem kleingeschriebenen e.

    Bei allen anderen Elementen wird die Groß- und Kleinschreibung nicht berücksichtigt.

Element

Wiederholbar

Zwischen Groß- und Kleinschreibung wird unterschieden

Beschreibung

$

Das Dollarzeichen wird vor den Ziffern in der Zahl eingefügt (normalerweise nach dem Zeichen).

TM

Textminimale Zahl, entweder TM9 oder TME, je nachdem, welche kleiner ist.

TM9

Textminimale Zahl in Positionsnotation.

TME

Textminimale Zahl in wissenschaftlicher Notation (mit Exponent).

B

Erzwingt, dass ein Nullwert als Leerzeichen in der nachfolgenden Zahl dargestellt wird.

MI

Expliziter Platzhalter für numerische Zeichen; wird entweder zu - oder zu einem Leerzeichen.

S

Expliziter Platzhalter für numerische Zeichen; wird entweder zu - oder +.

Zeichenposition für textminimale Formate

Standardmäßig ist das Zeichen für textminimale Formate entweder:

  • - für negative Zahlen, der Zahl vorangestellt.

  • Wird bei nicht negative Zahlen ausgelassen.

Die Elemente $, S und MI haben die gleiche Wirkung wie bei Formatmodellen mit fester Position. Beachten Sie, dass Gleitkommazahlen zwei verschiedene Nullwerte (+0. und -0.) haben, die infinitesimale positive bzw. negative Werte darstellen.

Parsen von Zahlen mit textminimalen Formaten und den Modifikatoren

Das Parsen mit textminimalen Formatmodellen ist von den Modifikatoren FX oder FM nicht betroffen. Die expliziten Vorzeichenelemente S und MI sind jedoch wie oben beschrieben betroffen.

TM9 matches any decimal number (integer or fractional) in positional notation; it does not match numbers in scientific notation (that is, with exponent). Conversely:

  • TME stimmt nur mit der wissenschaftlichen Notation überein.

  • TM stimmt mit beiden überein.

Zahlen, die mit textminimalen Elementen übereinstimmen, dürfen keine Leerzeichen oder Zifferngruppentrennzeichen enthalten.

Buchstaben innerhalb von Exponentenelementen und hexadezimalen Ziffern werden immer ohne Rücksicht auf Groß- und Kleinschreibung (unterer oder oberer Wert) abgeglichen.

Alternative, automatische und Standardformate

Element

Beschreibung

| (Pipe)

Trennt alternative Formate.

AUTO

Automatische Formate.

Beim Parsen von Zeichenfolgen können mehrere alternative Formate angegeben werden, indem Formatzeichenfolgen mit dem Zeichen | getrennt werden. Die Zeichenfolge wird erfolgreich geparst, wenn sie einem der Formate entspricht. Wenn die Eingabezeichenfolge mit mehreren Formaten übereinstimmt, wird jedes Format für die Konvertierung verwendet.

Ein für das gesamte Parsen verwendetes Format kann durch das Schlüsselwort AUTO ersetzt werden. Dadurch werden abhängig vom Typ der Quelle oder des Ergebniswerts ein oder mehrere alternative automatische Formate eingefügt. Das Hinzufügen eines benutzerdefinierten Formats zu den automatischen Formaten kann mit AUTO als Alternative durchgeführt werden.

Default formats are used when formats are not explicitly specified in cast functions, for parsing input values (that is, in CSV files), and for printing results.

Standardformate für die Ausgabe

In der folgenden Tabelle sind die Standardformate für die Ausgabe aufgeführt:

SQL-Datentyp

Parameter

Standardformat

DECIMAL

none

TM9

DOUBLE

none

TME

Standardformate für das Parsen

In der folgenden Tabelle sind die Standardformate für das Parsen aufgeführt:

SQL-Datentyp

Parameter

Standard-AUTO-Format

DECIMAL

None

TM9

DOUBLE

None

TME

The list of formats used for automatic optimistic string conversion (that is, for strings which are automatically recognized as numeric) is the union of all the formats in the above table of default input formats.

Beispiele

Ausgabebeispiele

Dieses Beispiel zeigt, wie Zahlen mit führenden Nullen angezeigt werden:

create table sample_numbers (f float);
insert into sample_numbers (f) values (1.2);
insert into sample_numbers (f) values (123.456);
insert into sample_numbers (f) values (1234.56);
insert into sample_numbers (f) values (-123456.789);
select to_varchar(f, '999,999.999'), to_varchar(f, 'S000,000.000') from sample_numbers;
Copy

Die Ausgabe sieht ungefähr so aus:

+------------------------------+-------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'S000,000.000') |
+==============================+===============================+
|        1.2                   | +000,001.200                  |
+------------------------------+-------------------------------+
|      123.456                 | +000,123.456                  |
+------------------------------+-------------------------------+
|    1,234.56                  | +001,234.560                  |
+------------------------------+-------------------------------+
| -123,456.789                 | -123,456.789                  |
+------------------------------+-------------------------------+
Copy

Sie brauchen keine führenden Nullen, um Zahlen anzupassen. Der Standardfüllmodus ist „fill“. Dies bedeutet, dass führende Leerzeichen verwendet werden, um Zahlen basierend auf den Positionen der Dezimalpunkte anzupassen.

select to_varchar(f, '999,999.999'), to_varchar(f, 'S999,999.999') from sample_numbers;
Copy

Die Ausgabe sieht ungefähr so aus:

+------------------------------+-------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'S999,999.999') |
+==============================+===============================+
|        1.2                   |       +1.2                    |
+------------------------------+-------------------------------+
|      123.456                 |     +123.456                  |
+------------------------------+-------------------------------+
|    1,234.56                  |   +1,234.56                   |
+------------------------------+-------------------------------+
| -123,456.789                 | -123,456.789                  |
+------------------------------+-------------------------------+
Copy

This example shows what happens if you use the FM (Fill Mode) modifier to switch from „fill“ mode to „compact“ mode, that is, to remove leading characters that would align the numbers:

select  to_varchar(f, '999,999.999'), to_varchar(f, 'FM999,999.999') from sample_numbers;
Copy

Die Ausgabe sieht ungefähr so aus:

+------------------------------+--------------------------------+
| TO_VARCHAR(F, '999,999.999') | TO_VARCHAR(F, 'FM999,999.999') |
+==============================+================================+
|        1.2                   | 1.2                            |
+------------------------------+--------------------------------+
|      123.456                 | 123.456                        |
+------------------------------+--------------------------------+
|    1,234.56                  | 1,234.56                       |
+------------------------------+--------------------------------+
| -123,456.789                 | -123,456.789                   |
+------------------------------+--------------------------------+
Copy

In diesem Beispiel wird erläutert, wie Zahlen in Exponentialschreibweise angezeigt werden:

select to_char(1234, '9d999EE'), 'will look like', '1.234E3';
Copy

Die Ausgabe sieht ungefähr so aus:

+--------------------------+------------------+-----------+
| TO_CHAR(1234, '9D999EE') | 'WILL LOOK LIKE' | '1.234E3' |
+==========================+==================+===========+
| 1.234E3                  |  will look like  |  1.234E3  |
+--------------------------+------------------+-----------+
Copy

Dies zeigt, wie Literale in die Ausgabe aufgenommen werden. Die literalen Teile sind in doppelte Anführungszeichen eingeschlossen (die wiederum in einfachen Anführungszeichen stehen, die die Zeichenfolge begrenzen).

select to_char(12, '">"99"<"');
Copy

Die Ausgabe sieht ungefähr so aus:

+-------+
| > 12< |
+-------+
Copy

Eingabebeispiele

Diese Beispiele zeigen die Verwendung von Formatmodellen für Eingaben.

Das folgende Beispiel zeigt einige einfache Eingabeoperationen, wobei der Unterschied zwischen der Verwendung von „0“ und „9“ zur Angabe des Ziffernformats hervorgehoben wird.

Die Ziffer „9“ als Formatierer akzeptiert Leerzeichen oder „fehlende“ führende Ziffern. Die Ziffer „0“ als Formatierer akzeptiert keine Leerzeichen oder fehlende führende Nullen.

-- All of the following convert the input to the number 12,345.67.
SELECT TO_NUMBER('012,345.67', '999,999.99', 8, 2);
SELECT TO_NUMBER('12,345.67', '999,999.99', 8, 2);
SELECT TO_NUMBER(' 12,345.67', '999,999.99', 8, 2);
-- The first of the following works, but the others will not convert.
-- (They are not supposed to convert, so "failure" is correct.)
SELECT TO_NUMBER('012,345.67', '000,000.00', 8, 2);
SELECT TO_NUMBER('12,345.67', '000,000.00', 8, 2);
SELECT TO_NUMBER(' 12,345.67', '000,000.00', 8, 2);
Copy

Hier erfahren Sie, wie Sie eines der beiden numerischen Formate (-### oder ###-) akzeptieren.

-- Create the table and insert data.
create table format1 (v varchar, i integer);
insert into format1 (v) values ('-101');
insert into format1 (v) values ('102-');
insert into format1 (v) values ('103');

-- Try to convert varchar to integer without a
-- format model.  This fails (as expected)
-- with a message similar to:
--    "Numeric value '102-' is not recognized"
update format1 set i = TO_NUMBER(v);

-- Now try again with a format specifier that allows the minus sign
-- to be at either the beginning or the end of the number.
-- Note the use of the vertical bar ("|") to indicate that
-- either format is acceptable.
update format1 set i = TO_NUMBER(v, 'MI999|999MI');
select i from format1;
Copy