Problém:
Chcete převést řetězec na desítkovou hodnotu v PostgreSQL.
Převedeme hodnotu v řetězci na datový typ DECIMAL.
Řešení 1:
Použijeme operátor ::. Zde je dotaz, který byste napsali:
SELECT ' 5800.79 '::DECIMAL;
Zde je výsledek:
numerický |
---|
5800,79 |
Jak jste si všimli, úvodní a koncové mezery byly odstraněny.
Diskuse:
Pomocí operátoru ::převeďte řetězce obsahující číselné hodnoty na datový typ DECIMAL. V našem příkladu jsme převedli řetězec ‚5800,79‘ na 5800,79 (hodnota DECIMAL).
Tento operátor se používá pro převod mezi různými datovými typy. V PostgreSQL je velmi populární. Můžete také použít standardní SQL operátor CAST()
, namísto ::
operátor.
Řešení 2:
SELECT CAST(' 5800.79 ' AS DECIMAL );
Zde je výsledek:
numerický |
---|
5800,79 |
Všimněte si, že CAST()
, jako je ::
operátor odstraní další mezery na začátku a na konci řetězce, než jej převede na číslo.
Databáze PostgreSQL poskytuje ještě jeden způsob převodu. Použijte TO_NUMBER()
Pokud potřebujete převést složitější řetězce. Tato funkce má dva argumenty:řetězec, který se má převést, a masku formátu, která označuje, jak by měl být každý znak v řetězci interpretován. Viz příklad níže:
Řešení 3:
SELECT TO_NUMBER(' 5 800,79- ', 'FM9G999D99S' );
Zde je výsledek:
numerický |
---|
-5800,79 |
Formátovací řetězec popisuje řetězec obsahující číslo (vstupní hodnotu jako řetězec). V tomto příkladu tato maska obsahuje symbol ‚FM‘, který odstraňuje mezery na začátku a na konci. ‚9‘ označuje jednu číslici (v našem příkladu 5) a ‚G‘ představuje skupinu číslic (v našem příkladu jedna mezera označuje skupinu tisíců).
Dále „999“ označuje další tři číslice (800).
Symbol „D“ určuje desetinnou značku (zde tečka/tečka „.“). Za desetinným symbolem následuje „99“ nebo dvě desetinné číslice.
Poslední symbol, ‚S‘, určuje použití znaménka plus nebo mínus (naše číslo je záporné, takže dostane mínus).
Zde jsou nejpoužívanější symboly pro tuto masku:
symbol | popis |
---|---|
FM | počáteční nuly a výplňové mezery |
9 | jedna číslice |
. | místní desetinná čárka |
G | oddělovač skupin |
D | místní oddělovač desetinných míst |
S | znaménko mínus nebo plus |
L | symbol místní měny |
Více informací o numerickém formátování naleznete v dokumentaci PostgreSQL.