Funzioni di conversione

È possibile utilizzare le funzioni di formattazione di Netezza Performance Server SQL per convertire i tipi di dati (data/ora, interi, virgola mobile, numerici) in stringhe formattate e per convertire le stringhe formattate in tipi di dati specifici.

Le funzioni " to_* utilizzano tutte una convenzione di chiamata comune: il primo argomento è il valore da formattare e il secondo argomento è un modello che definisce il formato di uscita o di ingresso. I modelli utilizzati da questi modelli sono descritti in Modelli di modelli per le conversioni data/ora.

Nota: Il tipo to_char esegue la fusione del tipo di dati 'date con un tipo di dati 'timestamp internamente.
La tabella seguente descrive le funzioni di conversione.
Tabella 1. Funzioni di conversione
Tipo Descrizione Esempi
hex_to_binary(VARCHAR) Converte una stringa codificata in caratteri esadecimali nel suo equivalente binario. Restituisce un valore VARBINARIO.  
hex_to_geometry(VARCHAR) Converte una stringa codificata in caratteri esadecimali nel suo valore equivalente ST_GEOMETRY.  
int_to_string(INT8, byteint) Converte un valore decimale in una stringa esadecimale, ottale, decimale o binaria. La funzione restituisce un valore VARCHAR. Il primo argomento specifica il valore decimale da convertire e il secondo argomento specifica la base del sistema numerico in cui convertire.
  • base 2 = binario
  • base 8 = ottale
  • base 10 = decimale
  • base 16 = esadecimale
 
string_to_int(VARCHAR, byteint) Converte una stringa esadecimale, ottale, decimale o binaria in un valore decimale. La funzione restituisce un valore INT8. Il primo argomento specifica la stringa da convertire e il secondo argomento specifica la base del sistema numerico del primo argomento.
  • base 2 = binario
  • base 8 = ottale
  • base 10 = decimale
  • base 16 = esadecimale
 
to_char(value,template) Converte il valore specificato (che può essere una data, un timestamp, un valore reale, a doppia precisione o numerico) in una stringa di caratteri.
  • Nel modello, il testo racchiuso tra virgolette doppie viene fatto passare.
  • Per emettere una doppia virgoletta, farla precedere da un backslash.
  • Quando si converte un numero positivo in un carattere, questa funzione inserisce uno spazio vuoto iniziale in modo che i valori positivi e negativi abbiano la stessa lunghezza. Per sopprimere questo spazio vuoto iniziale, utilizzare l'opzione prefisso FM.
Vedere la Tabella 2.
to_number(text,template) Converte una stringa di caratteri in un valore numerico. select to_number('12,454.8-', '99G999D9S');

Restituisce: -12454.8

to_date(text,template) Converte una stringa di caratteri in una data. Salta gli spazi vuoti multipli a meno che non si specifichi il prefisso FX come primo elemento del modello. select to_date('31 Dec 2015','DD Mon YYYY');

Restituisce: 2015-12-31

select to_date('31 Dec 2015','FXDD Mon YYYY');

Restituisce: 2015-12-31

select to_date('31 Dec 2015 20:33:33','DD Mon YYYY HH24":"MI":"SS');

Restituisce: 2015-12-31

to_timestamp(text,template) Converte una stringa di caratteri in un timestamp. Salta gli spazi vuoti multipli a meno che non si specifichi il prefisso FX come primo elemento del modello. select to_timestamp('31 Dec 2015 08:38:40 pm', 'DD Mon YYYY HH:MI:SS am');

Restituisce: 2015-12-31 20:38:40

Si noti che l'indicatore del meridiano (am o pm) del modello non deve necessariamente corrispondere a quello della stringa di input. Tuttavia, deve utilizzare lo stesso formato (con o senza punti).

Esempi della funzione to_char

Un'istruzione SELECT che contiene una delle espressioni mostrate nella tabella seguente restituisce il risultato indicato.

Tabella 2. Esempi della funzione to_char
Espressione Risultato Commenti
to_char(date '2015-02-14', 'YYYY Month') '2013 February ' A "febbraio" segue uno spazio vuoto perché nove caratteri (il numero di lettere di "settembre") sono riservati al nome di un mese, indipendentemente dal numero di lettere effettivamente necessarie.
to_char(date '2015-02-14', 'YYYY FMMonth') '2013 February' Il prefisso " FM rimuove lo spazio vuoto dopo "febbraio".
to_char(timestamp '2015-02-14 20:19:07', 'HH24:MI:SS') '20:19:07'  
to_char(timestamp '2015-02-14 20:19:07', 'HH:MI:SS am') '08:19:07 pm' L'indicatore del meridiano specificato dal modello viene regolato nell'output in modo da corrispondere all'ora (am per le ore da 0 a 12 o pm per le ore da 12 a 23). Per l'output viene utilizzato il formato dell'indicatore di meridiano specificato dal modello (maiuscolo o minuscolo, con o senza punti).
to_char(timestamp '2015-02-14 20:19:07', 'Day, DD  HH:MI:SS am')
'Monday   , 04 08:19:07 pm'
Tre spazi vuoti seguono "lunedì" perché nove caratteri (il numero di lettere di "mercoledì") sono riservati al nome di un giorno della settimana, indipendentemente dal numero di lettere effettivamente necessarie.
to_char(timestamp '2015-02-14 20:19:07', 'FMDay, DD  HH:MI:SS am')
'Monday, 4 8:19:7 pm'
Il prefisso " FM rimuove gli spazi vuoti che seguono "Monday". Inoltre, rimuove gli zeri iniziali dalla data, dalle ore e dai secondi.
to_char(timestamp '2015-02-14 20:19:07', 'Day, DD  FMHH:MI:SS am')
'Monday   , 04 8:19:7 pm'
Il prefisso " FM elimina gli zeri iniziali dalle ore e dai secondi.
to_char(125, '999') ' 125' Il risultato è una stringa di 4 caratteri, uno per ogni posizione del modello, più un ulteriore spazio vuoto che precede il numero al posto del segno più (+).
to_char(-125, '999') '-125' Il numero non è preceduto da uno spazio vuoto, a causa del segno meno (-).
to_char(125, '"999D999') ' 125.000' Il modello specifica che l'output deve includere tre cifre decimali. Il risultato è una stringa di 8 caratteri, uno per ogni posizione nel modello (il delimitatore decimale conta come posizione nel modello), più un ulteriore spazio vuoto che precede il numero al posto del segno più (+).
to_char(-125, '"The number is "999"."') 'The number is -125.' Il testo tra virgolette doppie viene fatto passare.
to_char(125, '"The number is "FM999"."') The number is 125. Il prefisso " FM sopprime il vuoto supplementare che normalmente precede il numero positivo.
to_char(12.7, '99.9') ' 12.7' Il risultato è una stringa di 5 caratteri, uno per ogni posizione del modello, più un ulteriore spazio vuoto che precede il numero al posto del segno più (+).
to_char(12.7, 'FM99.9') '12.7' Il prefisso " FM sopprime il vuoto supplementare che normalmente precede il numero positivo.
to_char(0.1, '999.99')
'    .10'
Il risultato è una stringa di 7 caratteri, uno per ogni posizione del modello. (Il punto decimale conta come posto nel modello)
to_char(-0.1, '999.99')
'   -.10'
Il risultato è una stringa di 7 caratteri, uno per ogni posizione del modello. (Il punto decimale conta come posto nel modello)
to_char(-0.1, 'FM999.99') '-.1' Il prefisso " FM sopprime gli spazi vuoti iniziali e lo zero finale.
to_char(.1, '0.9') ' 0.1' Lo 0 nel modello specifica che devono essere aggiunti tanti zeri iniziali quante sono le posizioni inutilizzate nel modello. Lo 0 conta come una posizione nel modello.
to_char(-12.7, '0999.9') '-0012.7' Lo 0 nel modello specifica che devono essere aggiunti tanti zeri iniziali quante sono le posizioni inutilizzate nel modello. Lo 0 conta come una posizione nel modello.
to_char(12.7, '90999.9')
'  0012.7'
Il risultato è una stringa di 8 caratteri, uno per ogni posizione del modello, più un ulteriore spazio vuoto che precede il numero al posto del segno più (+).
to_char(-12.7, '9999999')
'     -13'
Il risultato è una stringa di 8 caratteri, uno per ogni posizione del modello, più un carattere aggiuntivo per il segno meno (-).
to_char(485, '9 9 9') ' 4 8 5'  
to_char(1485, '9,999') ' 1,485'  
to_char(1485, '9G999') ' 1,485' Lo schema 'G rappresenta il delimitatore di gruppo specificato per il vostro locale.
to_char(148.5, '999.999') ' 148.500'  
to_char(148.5, 'FM999.999') '148.5'  
to_char(148.5, 'FM999.990') '148.500'  
to_char(148.5, '999D999') ' 148.500' Il delimitatore decimale utilizzato dipende dal locale in cui ci si trova.
to_char(3148.5, '9G999D999') ' 3,148.500' Lo schema 'G rappresenta il delimitatore di gruppo specificato per il vostro locale.
to_char(125,'S999') '+125' Il numero non è preceduto da uno spazio vuoto, perché lo schema 'S specifica che il segno deve essere sempre incluso nell'output.
to_char(125, '999S') '125+' Il numero non è preceduto da uno spazio vuoto, perché lo schema 'S specifica che il segno deve essere sempre incluso nell'output.
to_char(-485, '999S') '485-'  
to_char(-485, 'MI999') '-485' Per un numero negativo, il modello " MI inserisce il segno meno (-) nella posizione corrispondente.
to_char(-485, '999MI') '485-'
to_char(485, 'MI999') ' 485' Per un numero positivo, lo schema " MI inserisce uno spazio vuoto nella posizione corrispondente. Il modello " MI non influisce sullo spazio vuoto iniziale che precede un numero positivo.
to_char(485, '999MI') ' 485 '
to_char(485, 'FM999MI') '485 ' Il prefisso " FM sopprime lo spazio vuoto supplementare che normalmente precede il numero positivo, ma non influisce sullo spazio vuoto aggiunto dal suffisso " MI.
to_char(485, 'PL999') '+485' Per un numero positivo, il modello " PL inserisce il segno più (+) nella posizione corrispondente.
to_char(485, '999PL') '485+'
to_char(-485, '999PL') '-485 ' Per un numero negativo, il modello " PL inserisce uno spazio vuoto nella posizione corrispondente. Il suffisso " PL non influisce sul segno meno (-) che precede un numero negativo.
to_char(-485, 'PL999') ' -485 '
to_char(-3485, 'SG9999') '-3485'  
to_char(-3485, 'S9G999') '-3,485'  
to_char(-3485, '99SG99') '34-85'  
to_char(-485, '999PR') '<485>'  
to_char(485, '999PR') ' 485'  
to_char(485, 'FM999PR') '485' Il prefisso " FM elimina il vuoto supplementare che normalmente precede un numero positivo.
to_char(485, 'RN') 'CDLXXXV'  
to_char(5.2, 'RN') 'V' I numeri romani ignorano le frazioni decimali.
to_char(482, '999th') ' 482nd' Il suffisso " th determina il suffisso ordinale appropriato (st, nd, rd o th).
to_char(485.8, '"Pre: "FM999" Post:" .999') 'Pre: 485 Post: .800' Il prefisso " FM elimina il vuoto supplementare che normalmente precede un numero positivo.
to_char(485.8, '"Pre: "FM999" Post:" .999') 'Pre: -485 Post: .800' Il prefisso " FM non influisce su un numero negativo.
to_char(12, '99V999') ' 12000'  
to_char(12.4, '99V999') ' 12400'  
to_char(12.45, '99V9') ' 125'