Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Benutzerdefinierte numerische Formatzeichenfolgen, die von FORMAT() in SQL Server unterstützt werden

Dieser Artikel enthält eine Referenz für die benutzerdefinierten numerischen Formatbezeichner, die beim Formatieren von Zahlen mit FORMAT() verwendet werden können Funktion in SQL Server. Beispiele enthalten.

Zeichenfolge formatieren Beschreibung/Beispiel
0

Null-Platzhalter . Ersetzt die Null durch die entsprechende Ziffer, falls vorhanden; andernfalls erscheint Null in der Ergebniszeichenfolge.

Beispiele :

SELECT 
  FORMAT(12.34, '0') R1,
  FORMAT(012.34, '00') R2,
  FORMAT(12.34, '000') R3,
  FORMAT(012.34, '0000') R4,
  FORMAT(12.54, '00') R5;
+------+------+------+------+------+
| R1   | R2   | R3   | R4   | R5   |
|------+------+------+------+------|
| 12   | 12   | 012  | 0012 | 13   |
+------+------+------+------+------+
#

Ziffernplatzhalter . Ersetzt das „#“-Symbol durch die entsprechende Ziffer, falls vorhanden; andernfalls erscheint keine Ziffer in der Ergebniszeichenfolge.

In der Ergebniszeichenfolge erscheint keine Ziffer, wenn die entsprechende Ziffer in der Eingabezeichenfolge eine nicht signifikante 0 ist.

Beispiele :

SELECT 
  FORMAT(12.34, '#') R1,
  FORMAT(012.34, '##') R2,
  FORMAT(12.34, '###') R3,
  FORMAT(012.34, '####') R4,
  FORMAT(12.54, '##') R5;
+------+------+------+------+------+
| R1   | R2   | R3   | R4   | R5   |
|------+------+------+------+------|
| 12   | 12   | 12   | 12   | 13   |
+------+------+------+------+------+
.

Dezimalpunkt . Bestimmt die Position des Dezimaltrennzeichens in der Ergebniszeichenfolge.

Beispiele :

SELECT 
  FORMAT(12.34, '0.0', 'en-US') R1,
  FORMAT(12.34, '.00', 'en-US') R2,
  FORMAT(12.34, '.', 'en-US') R3,
  FORMAT(12.34, '.00', 'fr-FR') R4;
+------+-------+------+-------+
| R1   | R2    | R3   | R4    |
|------+-------+------+-------|
| 12.3 | 12.34 | 12   | 12,34 |
+------+-------+------+-------+
,

Gruppentrenner und Zahlenskalierung . Kann sowohl als Gruppentrennzeichen (auch bekannt als Tausendertrennzeichen) als auch als Zahlenskalierungsbezeichner verwendet werden.

  • Als Gruppentrenner , fügt es ein lokalisiertes Gruppentrennzeichen zwischen jeder Gruppe ein.
  • Als Zahlenskalierungsspezifizierer , es dividiert eine Zahl durch 1000 für jedes angegebene Komma.

Um ein Gruppentrennzeichen anzugeben, setzen Sie ein oder mehrere Kommas zwischen zwei Ziffernplatzhalter (0 oder #), die die ganzzahligen Ziffern einer Zahl formatieren. Dadurch wird im ganzzahligen Teil der Ausgabe zwischen jeder Zahlengruppe ein Gruppentrennzeichen eingefügt.

Um einen Zahlenskalierungsbezeichner anzugeben, platzieren Sie ein oder mehrere Kommas unmittelbar links vom expliziten oder impliziten Dezimalpunkt.

Beispiele – Als Gruppentrenner :

SELECT 
  FORMAT(12345678, '#,#', 'en-US') 'US English',
  FORMAT(12345678, '#,#', 'fr-FR') 'French',
  FORMAT(12345678, '#,#', 'es-ES') 'Spanish';
+--------------+------------+------------+
| US English   | French     | Spanish    |
|--------------+------------+------------|
| 12,345,678   | 12 345 678 | 12.345.678 |
+--------------+------------+------------+

Beispiele – Als Spezifizierer für die Zahlenskalierung :

SELECT 
  FORMAT(12000, '#,', 'en-US') 'R1',
  FORMAT(1234567890, '#,', 'en-US') R2,
  FORMAT(1234567890, '#,,', 'en-US') R3;
+------+---------+------+
| R1   | R2      | R3   |
|------+---------+------|
| 12   | 1234568 | 1235 |
+------+---------+------+

Beispiele – Als beide :

SELECT 
  FORMAT(1234567890, '#,#,', 'en-US') R1,
  FORMAT(1234567890, '#,#,,', 'en-US') R2;
+-----------+-------+
| R1        | R2    |
|-----------+-------|
| 1,234,568 | 1,235 |
+-----------+-------+
%

Prozentplatzhalter . Multipliziert eine Zahl mit 100 und fügt ein lokalisiertes Prozentzeichen in die Ergebniszeichenfolge ein.

Beispiele :

SELECT 
  FORMAT(0.1234, '#.# %', 'en-US') R1,
  FORMAT(0.1235, '#.#%', 'zh-cn') R2,
  FORMAT(0.125, '#. %', 'en-US') R3,
  FORMAT(0.1234, '%#.00,', 'tr') R4,
  FORMAT(0.1234, '#.#%', 'it') R5;
+--------+-------+------+--------+-------+
| R1     | R2    | R3   | R4     | R5    |
|--------+-------+------+--------+-------|
| 12.3 % | 12.4% | 13 % | %12,34 | 12,3% |
+--------+-------+------+--------+-------+

Promille-Platzhalter . Multipliziert eine Zahl mit 1000 und fügt ein lokalisiertes Promillezeichen in die Ergebniszeichenfolge ein.

Beispiele :

SELECT 
  FORMAT(0.01234, '#.# ‰', 'en-US') 'R1',
  FORMAT(0.01235, '#.# ‰', 'en-US') R2,
  FORMAT(0.0125, '#. ‰', 'en-US') R3,
  FORMAT(0.01234, '#.# ‰', 'fr-FR') R4;
+--------+--------+------+--------+
| R1     | R2     | R3   | R4     |
|--------+--------+------+--------|
| 12.3 ‰ | 12.4 ‰ | 13 ‰ | 12,3 ‰ |
+--------+--------+------+--------+

E0
E+0
E-0
e0
e+0
e-0

Exponentialschreibweise . Wenn mindestens eine Null folgt (0 ), formatiert das Ergebnis in Exponentialschreibweise. Der Fall (E oder e ) gibt die Groß-/Kleinschreibung des Exponentensymbols in der Ergebniszeichenfolge an. Die Anzahl der Nullen nach dem E oder e Zeichen bestimmt die Mindestanzahl von Stellen im Exponenten. Ein Pluszeichen (+ ) gibt an, dass dem Exponenten immer ein Vorzeichen vorangestellt wird. Ein Minuszeichen (- ) gibt an, dass ein Vorzeichen nur vor negativen Exponenten steht.

Beispiele :

SELECT 
  FORMAT(123456789, '0e0') R1,
  FORMAT(123456789, '0e+0') R2,
  FORMAT(123456789, '0E+00') R3,
  FORMAT(1234.56789, '0.0##e+00') R4,
  FORMAT(12.3456789-12, '0e-0') R5;
+------+------+-------+-----------+------+
| R1   | R2   | R3    | R4        | R5   |
|------+------+-------+-----------+------|
| 1e8  | 1e+8 | 1E+08 | 1.235e+03 | 3e-1 |
+------+------+-------+-----------+------+

\

Escape-Zeichen . Bewirkt, dass das nächste Zeichen als Literal und nicht als benutzerdefinierter Formatbezeichner interpretiert wird.

Beispiel :

SELECT FORMAT(123, '\#0000') Result;
+----------+
| Result   |
|----------|
| #0123    |
+----------+

'string'
"string"

Literal-String-Trennzeichen . Gibt an, dass die eingeschlossenen Zeichen unverändert in die Ergebniszeichenfolge kopiert werden sollen.

Beispiel :

SELECT FORMAT(23, '## Degrees') Result;
+------------+
| Result     |
|------------|
| 23 Degrees |
+------------+

;

Abschnittstrenner . Dies ist ein bedingter Formatbezeichner, der Abschnitte mit separaten Formatzeichenfolgen für positive, negative und Nullzahlen definiert. Auf diese Weise können Sie eine Zahl unterschiedlich formatieren, je nachdem, ob ihr Wert positiv, negativ oder null ist. Eine benutzerdefinierte Formatzeichenfolge kann bis zu drei durch Semikolons getrennte Abschnitte enthalten.

  • Ein Abschnitt :Der Formatstring gilt für alle Werte (genauso wie in den vorherigen Beispielen).
  • Zwei Abschnitte :Der erste Abschnitt gilt für positive Werte und Nullen, der zweite Abschnitt gilt für negative Werte.

    Wenn die zu formatierende Zahl negativ ist, aber nach dem Runden gemäß dem Format im zweiten Abschnitt Null wird, wird die resultierende Null gemäß dem ersten Abschnitt formatiert.

  • Drei Abschnitte :Der erste Abschnitt gilt für positive Werte, der zweite Abschnitt gilt für negative Werte und der dritte Abschnitt gilt für Nullen.

    Der zweite Abschnitt kann leer gelassen werden (indem nichts zwischen den Semikolons steht), in diesem Fall gilt der erste Abschnitt für alle Werte ungleich Null.

    Wenn die zu formatierende Zahl nicht Null ist, aber nach dem Runden gemäß dem Format im ersten oder zweiten Abschnitt Null wird, wird die resultierende Null gemäß dem dritten Abschnitt formatiert.

Beachten Sie, dass negative Werte immer ohne Minuszeichen angezeigt werden, wenn Abschnittstrennzeichen verwendet werden. Wenn Sie möchten, dass der formatierte Endwert ein Minuszeichen hat, müssen Sie das Minuszeichen ausdrücklich als Teil der benutzerdefinierten Formatzeichenfolge einschließen. Dies gilt auch für alle anderen bereits vorhandenen Formatierungen, die einer Nummer zugeordnet sind.

Beispiel – Ein Abschnitt (keine Abschnittstrennzeichen)
Dies ist ein typischer Formatstring, der aus einem Abschnitt besteht (genau wie in den vorherigen Beispielen). Daher werden keine Trennzeichen verwendet.

SELECT 
  FORMAT(123, '0 (Number)') Positive,
  FORMAT(-123, '0 (Number)') Negative,
  FORMAT(0, '0 (Number)') Zero;
+--------------+---------------+------------+
| Positive     | Negative      | Zero       |
|--------------+---------------+------------|
| 123 (Number) | -123 (Number) | 0 (Number) |
+--------------+---------------+------------+

Beachten Sie, dass das Minuszeichen erhalten bleibt, da ich keine Abschnittstrennzeichen verwendet habe.

Beispiele – Zwei Abschnitte :

/* EXAMPLE 1 - Same format string, different values */
SELECT 
  FORMAT(123,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-123, '0 (Positive or Zero); 0 (Negative)') Negative,
  FORMAT(0,    '0 (Positive or Zero); 0 (Negative)') Zero;
+------------------------+-----------------+----------------------+
| Positive               | Negative        | Zero                 |
|------------------------+-----------------+----------------------|
| 123 (Positive or Zero) |  123 (Negative) | 0 (Positive or Zero) |
+------------------------+-----------------+----------------------+

/* EXAMPLE 2 - Rounding. 
Negative values rounded to zero get 
formatted under the first format string. 
*/
SELECT 
  FORMAT(0.1,  '0 (Positive or Zero); 0 (Negative)') Positive,
  FORMAT(-0.1, '0 (Positive or Zero); 0 (Negative)') Negative;
+----------------------+----------------------+
| Positive             | Negative             |
|----------------------+----------------------|
| 0 (Positive or Zero) | 0 (Positive or Zero) |
+----------------------+----------------------+

Beispiele – Drei Abschnitte :

/* EXAMPLE 1 - Basic Usage */
SELECT FORMAT(123, '0 (Positive); 0 (Negative); 0 (Zero)') Result;
+----------------+
| Result         |
|----------------|
| 123 (Positive) |
+----------------+

/* EXAMPLE 2 - Same format string, different values */
SELECT 
  FORMAT(123,   '0 (Positive); 0 (Negative); 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Positive); 0 (Negative); 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Positive); 0 (Negative); 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Positive); 0 (Negative); 0 (Zero)') 'Rounded to Zero';

+----------------+----------------+-----------+-------------------+
| Positive       | Negative       | Zero      | Rounded to Zero   |
|----------------+----------------+-----------+-------------------|
| 123 (Positive) | 123 (Negative) |  0 (Zero) |  0 (Zero)         |
+----------------+----------------+-----------+-------------------+

/* EXAMPLE 3 - Second format string is empty */
SELECT 
  FORMAT(123,   '0 (Positive);; 0 (Zero)') 'Positive',
  FORMAT(-123,  '0 (Positive);; 0 (Zero)') 'Negative',
  FORMAT(0,     '0 (Positive);; 0 (Zero)') 'Zero',
  FORMAT(0.123, '0 (Positive);; 0 (Zero)') 'Rounded to Zero';
+----------------+-----------------+-----------+-------------------+
| Positive       | Negative        | Zero      | Rounded to Zero   |
|----------------+-----------------+-----------+-------------------|
| 123 (Positive) | -123 (Positive) |  0 (Zero) |  0 (Zero)         |
+----------------+-----------------+-----------+-------------------+
Andere

Alle anderen Zeichen. Das Zeichen wird unverändert in den Ergebnisstring kopiert.

Beispiel :

SELECT FORMAT(12, '# °C') Result;
+----------+
| Result   |
|----------|
| 12 °C    |
+----------+

Die obige Liste ist eine vollständige Liste gültiger benutzerdefinierter .NET-Formatzeichenfolgen, basierend auf den Informationen aus der offiziellen .NET-Dokumentation für benutzerdefinierte Formatzeichenfolgen auf der Microsoft-Website zum Zeitpunkt des Schreibens.

Der Grund, warum diese für den SQL Server FORMAT() relevant sind Funktion ist, dass sie nur gültige .NET Framework-Formatzeichenfolgen akzeptiert.

Zusätzlich zu den oben genannten benutzerdefiniert Formatstrings können Sie auch Standard verwenden Zeichenfolgen formatieren. Hier ist eine vollständige Liste der standardmäßigen numerischen Formatzeichenfolgen, die Sie mit SQL Server verwenden können.

Sie können auch Datums- und Uhrzeitwerte formatieren. Sehen Sie sich die Liste der standardmäßigen Formatzeichenfolgen für Datum und Uhrzeit sowie die benutzerdefinierten Formatzeichenfolgen für Datum und Uhrzeit an, die Sie mit FORMAT() verwenden können Funktion.

Wenn Sie immer noch versuchen zu verstehen, was eine Formatzeichenfolge überhaupt ist, lesen Sie Was ist eine Formatzeichenfolge in SQL Server? für ein grundlegendes Verständnis von Formatstrings und wie sie sich auf FORMAT() beziehen Funktion.