SQL-Formatmodelle

In Snowflake werden SQL-Formatmodelle (d. h. Literale, die Formatzeichenfolgen enthalten) verwendet, um anzugeben, wie numerische Werte in Textzeichenfolgen konvertiert werden und umgekehrt. Sie können daher als Argumente in den Konvertierungsfunktionen TO_CHAR , TO_VARCHAR und TO_DECIMAL , TO_NUMBER , TO_NUMERIC angegeben werden.

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.

Unter diesem Thema:

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;

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.

Im compact-Modus erzeugen die meisten Formatelemente nur eine Ausgabe mit minimaler Breite (d. h. führende Nullen und Leerzeichen sowie nachstehende Leerzeichen werden unterdrückt).

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

Es dürfen nur normale Leerzeichen innerhalb von Werten geparst werden (d. h. Komponenten dürfen sich nicht in unterschiedlichen Zeilen befinden, durch Tabulatoren getrennt usw.).

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.

Normalerweise werden die führenden Nullen im ganzzahligen Teil und die nachstehende Nullen im Bruchteil durch Leerzeichen ersetzt (außer wenn der Wert des ganzzahligen Teils null ist. In diesem Fall wird er als einzelnes 0-Zeichen dargestellt). Um dieses Verhalten zu unterdrücken, verwenden Sie das Formatelement 0 anstelle von 9. Die entsprechenden Positionen enthalten 0-Zeichen. Wenn das Formatelement B vor der Zahl verwendet wird, unterdrückt es die Beibehaltung der letzten 0 im ganzzahligen Wert (d. h., wenn Sie B verwenden und der Wert des ganzzahligen Teils der Zahl Null ist, werden alle Ziffern als Leerzeichen dargestellt).

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.

Normalerweise werden Hexadezimalzahlen als vorzeichenlose Zeichen ausgegeben, d. h. negative Zahlen haben alle 1 in den wichtigsten Bits, aber durch die Verwendung des X-Elements zusammen mit einem expliziten Vorzeichen (S oder MI) wird das --Zeichen zusammen mit dem absoluten Wert der Zahl ausgegeben.

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

Exponent mit variabler Breite, 2 bis 5 Zeichen, ohne +-Zeichen für ganze Zahlen (z. B. 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

Exponent mit fester Breite (5 Zeichen); der Bereich erstreckt sich von E-324 bis E+308.

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:

    • Zifferngruppentrennzeichen sind optional (d. h. Zahlen mit oder ohne Gruppentrennzeichen stimmen überein – obwohl die Anzahl der Ziffern zwischen den jeweiligen Gruppentrennzeichen übereinstimmen muss); + ist als gültige Übereinstimmung für das MI-Formatelement ebenfalls zulässig.

    • 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:

    • Die Zahl muss eine geeignete Anzahl von Leerzeichen anstelle der ausgelassenen Ziffern enthalten, um dem Format zu entsprechen (d. h. im fill-Modus handelt es sich um Leerzeichen und im compact-Modus um keine Leerzeichen).

    • 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 gibt die Zahl in wissenschaftlicher Schreibweise aus, d. h. mit Exponent (gleich EE) und einer Ziffer an der Ganzzahlposition des Bruchteils. Der Fall des Exponentenindikators (E oder e) stimmt mit der Schreibweise des ersten Buchstabens (T oder t) im Formatelement überein.

  • 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 entspricht einer beliebigen Dezimalzahl (Ganzzahl oder Bruch) in der Positionsnotation; es stimmt nicht mit Zahlen in wissenschaftlicher Schreibweise überein (d. h. mit Exponenten). Umgekehrt:

  • 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.

Standardformate werden verwendet, wenn Formate nicht explizit in Umwandlungsfunktionen angegeben werden, um Eingabewerte zu parsen (d. h. in CSV-Dateien) und um Ergebnisse auszugeben.

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

Die Liste der Formate, die für die automatische optimistische Zeichenfolgenkonvertierung verwendet werden (d. h. für Zeichenfolgen, die automatisch als numerisch erkannt werden) ist die Vereinigung aller Formate in der obigen Tabelle der Standardeingabeformate.

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;

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                  |
+------------------------------+-------------------------------+

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;

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                  |
+------------------------------+-------------------------------+

Dieses Beispiel zeigt, was passiert, wenn Sie mit dem Modifikator FM (Füllmodus) vom fill-Modus in den compact-Modus wechseln, d. h. führende Zeichen entfernen, die die Zahlen anpassen würden:

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

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                   |
+------------------------------+--------------------------------+

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

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

Die Ausgabe sieht ungefähr so aus:

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

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

Die Ausgabe sieht ungefähr so aus:

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

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

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;
Zurück zum Anfang