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
oderX
folgt; ansonsten bleibt es erhalten, wie es ist.,
(Komma)Wird in numerischen Modellen als Formatelement behandelt, wenn das Zeichen auf
0
,9
oderX
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 |
---|---|
|
Nichts wird ausgegeben; optionales Leerzeichen bei der Eingabe. |
|
Füllmodusmodifikator; wechselt zwischen den Modi compact und fill für alle Elemente, die im Modell auf den Modifikator folgen. |
|
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
oderX
platziert sind)Textminimal (Formatelemente
TM
,TME
undTM9
)
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ßgeschriebenenE
.ee
verarbeitet Exponenten mit einem kleingeschriebenene
.
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). |
||
|
Dezimalbruchtrennzeichen; immer als Punkt ausgegeben. |
||
|
✔ |
Zifferngruppentrennzeichen; als Komma oder Leerzeichen ausgegeben. |
|
|
✔ |
Position einer Ziffer; führende/nachstehende Nullen werden explizit ausgegeben. |
|
|
✔ |
Position einer Ziffer; führende/nachstehende Nullen werden durch Leerzeichen ersetzt. |
|
|
Erzwingt, dass ein Nullwert als Leerzeichen in der nachfolgenden Zahl dargestellt wird. |
||
|
Dezimalbruchtrennzeichen; Alternative für das Element |
||
|
✔ |
Exponent mit variabler Breite, 2 bis 5 Zeichen, ohne |
|
|
✔ |
Exponent mit fester Breite (3 Zeichen); der Bereich erstreckt sich von |
|
|
✔ |
Exponent mit fester Breite (4 Zeichen); der Bereich erstreckt sich von |
|
|
✔ |
Exponent mit fester Breite (5 Zeichen); der Bereich erstreckt sich von |
|
|
✔ |
Zifferngruppentrennzeichen; Alternative für |
|
|
Expliziter Platzhalter für numerische Zeichen; gibt ein Leerzeichen für positive Zahlen oder ein |
||
|
Expliziter Platzhalter für numerische Zeichen; gibt ein |
||
|
✔ |
✔ |
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 FormatelementB
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 |
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
---|---|---|
|
|
|
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 dasMI
-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
undEEEEE
) alsEE
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 (sieheTME
unten). Wenn die Gleitkommazahl zu klein ist, gibtTM9
den Wert Null aus.TME
gibt die Zahl in wissenschaftlicher Schreibweise aus, d. h. mit Exponent (gleichEE
) und einer Ziffer an der Ganzzahlposition des Bruchteils. Der Fall des Exponentenindikators (E
odere
) stimmt mit der Schreibweise des ersten Buchstabens (T
odert
) im Formatelement überein.TM
wählt entwederTM9
oderTME
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ßgeschriebenenE
.tme
verarbeitet Exponenten mit einem kleingeschriebenene
.
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). |
||
|
✔ |
Textminimale Zahl, entweder |
|
|
✔ |
Textminimale Zahl in Positionsnotation. |
|
|
✔ |
Textminimale Zahl in wissenschaftlicher Notation (mit Exponent). |
|
|
Erzwingt, dass ein Nullwert als Leerzeichen in der nachfolgenden Zahl dargestellt wird. |
||
|
Expliziter Platzhalter für numerische Zeichen; wird entweder zu |
||
|
Expliziter Platzhalter für numerische Zeichen; wird entweder zu |
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 |
---|---|
|
Trennt alternative Formate. |
|
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 |
|
DOUBLE |
none |
|
Standardformate für das Parsen¶
In der folgenden Tabelle sind die Standardformate für das Parsen aufgeführt:
SQL-Datentyp |
Parameter |
Standard- |
---|---|---|
DECIMAL |
None |
|
DOUBLE |
None |
|
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;