Zde je rychlý způsob, jak přidat závorky kolem záporných čísel na serveru SQL Server při použití FORMAT()
funkce.
Cílem je, aby se závorky přidávaly pouze do záporných hodnoty. Ke kladným hodnotám nebo nulám se nepřidávají žádné závorky. Závorky také nahrazují jakékoli znaménko mínus, které by se jinak zobrazilo (jinými slovy, při použití závorek se nezobrazuje žádné znaménko mínus).
Ačkoli formátování je často nejlepší ponechat na prezentační vrstvě, mohou nastat případy, které diktují řešení T-SQL v SQL Server. V takových případech vám snad tento článek pomůže.
Příklad 1 – Automatické závorky
Jak již bylo zmíněno, řešení v tomto článku používají FORMAT()
funkce. Tato funkce naformátuje číselnou hodnotu (nebo datum/čas) a poté vrátí formátovanou řetězcovou reprezentaci této hodnoty.
Při volání této funkce předáte hodnotu, která má být formátována, a formátovací řetězec, který určuje, jak bude formátována. Můžete také zadat třetí argument pro definování národního prostředí/kultury, která se má použít pro výstup.
Tím narážím na to, že existují případy, kdy FORMAT()
automaticky obklopí záporné hodnoty hranatými závorkami v závislosti na použitém formátovacím řetězci a kultuře.
Zde je příklad formátování čísla jako měny pomocí dvou různých argumentů „kultury“:
SELECT FORMAT(-1.23, 'C', 'en-us') 'en-us', FORMAT(-1.23, 'C', 'en-gb') 'en-gb';
Výsledek:
+----------+---------+| en-us | en-gb ||---------+---------|| (1,23 USD) | -1,23 GBP |+---------+---------+
V tomto případě je to kombinace formátovacího řetězce a kultury, která určuje, zda jsou záporné hodnoty uzavřeny v závorkách nebo ne.
C
je standardní číselný specifikátor formátu, který formátuje číslo jako měnu. Při použití tohoto specifikátoru formátu je přesný výstup určen kulturou. Důvodem je, že různé kultury používají různé konvence pro zobrazování částek v měně. Kultura určí skutečný symbol měny, který se má použít, jeho umístění a také způsob zobrazení záporných hodnot.
Pokud nezadáte kulturu, použije se jazyk aktuální relace. Toto je obvykle výchozí jazyk pro uživatele, ale lze jej také změnit pomocí SET LANGUAGE
prohlášení.
Příklad 2 – Podmíněné formátování
Pokud standardní formátovací řetězec neposkytuje požadované výsledky, budete muset místo něj použít vlastní číselný formátovací řetězec.
Zde je příklad použití vlastního číselného formátovacího řetězce k uzavření výsledku do závorek:
SELECT FORMAT(-123, '0; (0)') Výsledek;
Výsledek:
+-----------+| Výsledek ||-----------|| (123) |+----------+
Abychom dosáhli požadovaných výsledků, formátovací řetězec používá oddělovač sekcí, který poskytuje podmíněné formátování.
Podmíněné formátování je místo, kde zadáte jiný formát v závislosti na dané podmínce. Při použití FORMAT()
Pomocí podmíněného formátování můžete na číslo použít různé formátování v závislosti na tom, zda je toto číslo kladné, záporné nebo nulové.
V této souvislosti je podmíněné formátování umožněno středníkem (;
). To se nazývá „oddělovač oddílů“. V tomto případě jsem použil pouze jeden středník, protože chci pouze dva oddíly (pro rozlišení mezi zápory a zápory).
Pokud jsou zahrnuty pouze dva oddíly, platí první oddíl pro kladné hodnoty i nuly. Druhá část platí pro záporné hodnoty. Můžete také přidat další středník pro určení jiného formátu pouze pro nuly (více o tom níže).
Příklad 3 – Porovnání s kladným a nulovým
Zde je další příklad, tentokrát uvádím kladnou hodnotu a nulu (jen pro jasnější ukázku).
SELECT FORMAT(-123, '0; (0)') záporné, FORMAT(123, '0; (0)') kladné, FORMAT(0, '0; (0)') nula;
Výsledek:
+------------+------------+--------+| Negativní | Pozitivní | Nula ||------------+------------+--------|| (123) | 123 | 0 |+------------+------------+--------+
Příklad 4 – Alternativní formátování
Nejste omezeni pouze na závorky. Můžete použít například složené závorky nebo hranaté závorky nebo téměř cokoli, co se vám líbí.
SELECT FORMAT(-123, '0; {0}') R1, FORMAT(-123, '0; [0]') R2, FORMAT(-123, '0; VAROVÁNÍ! ZÁPORNÁ HODNOTA!!!' ) R3;
Výsledek:
+--------+--------+---------------------------- -+| R1 | R2 | R3 ||--------+--------+----------------------------- || {123} | [123] | VAROVÁNÍ! NEGATIVNÍ HODNOTA!!! |+--------+--------+-----------------------------+
Příklad 5 – Tři podmínky
Jak již bylo zmíněno, můžete také přidat třetí podmínku, abyste zajistili samostatné formátování nul. Zde je rychlý příklad:
SELECT FORMAT(-123, '0; (0); 0 (nula)') R1, FORMAT(123, '0; (0); 0 (nula)') R2, FORMAT(0, '0; (0); 0 (nula)') R3;Výsledek:
+--------+------+-----------+| R1 | R2 | R3 ||--------+------+-----------|| (123) | 123 | 0 (nula) |+--------+------+-----------+Příklad 6 – Kde je znaménko mínus?
Možná jste si všimli, že znaménko mínus se na záporných hodnotách ani neobjevilo. Důvodem je, že oddělovač sekcí ignoruje jakékoli dříve existující formátování hodnoty (včetně všech znamének mínus). To znamená, že pokud používáte podmíněné formátování a skutečně chcete znaménko mínus u záporných hodnot, budete ho muset přidat do formátovacího řetězce:
SELECT FORMAT(-123, '0; 0 (záporné); 0 (nula)') 'Bez znaménka mínus', FORMAT(-123, '0; -0 (záporné); 0 (nula)') ' Se znaménkem mínus';Výsledek:
+----------------------+-------------------+| Bez znaménka mínus | Se znaménkem mínus ||----------------------+-------------------|| 123 (negativní) | -123 (negativní) |+----------------------+-------------------+Existují však případy, kdy znaménko mínus zůstane nedotčeno (alespoň v mém systému):
SELECT FORMAT(123, '0;; 0 (nula)') kladné, FORMAT(-123, '0;; 0 (nula)') záporné;Výsledek:
+------------+------------+| Pozitivní | Negativní ||------------+------------|| 123 | -123 |+------------+------------+V tomto příkladu sdílejí záporné a kladné hodnoty stejnou sekci. Je to proto, že jsem přidal oddělovač sekce pro záporné hodnoty, ale nechal jsem ho prázdný. V tomto případě platí formátovací řetězec v první sekci pro pozitivní i záporné hodnoty.
Jak již bylo zmíněno, v tomto případě znaménko mínus zůstává nedotčeno pro záporné hodnoty.