sql >> Databáze >  >> RDS >> Sqlserver

Jak určit invariantní kulturu při použití FORMAT() na serveru SQL Server

V SQL Server můžete použít FORMAT() funkce pro formátování hodnot data/času a čísel jako řetězce. Funkce zejména poskytuje formátování „s ohledem na místní prostředí“ a funkce přijímá argument „kultura“, který vám umožňuje určit kulturu nebo jazyk, který se má použít pro skutečný formát. Můžete například předat en-us abyste zajistili, že výsledky budou formátovány ve formátu americké angličtiny.

Argument kultury je volitelný, takže pokud jej nezadáte, výstup bude určen jazykem aktuální relace.

FORMAT() funkce přijímá jako argument jakoukoli kulturu podporovanou rozhraním .NET Framework (nejste omezeni na jazyky výslovně podporované SQL Serverem).

Jednou z kultur podporovaných rozhraním .NET Framework je invariantní kultura. Invariantní kultura je kulturně necitlivá. Přesněji řečeno, tato kultura je spojena s angličtinou, ale ne s žádnou zemí/oblastí.

Chcete-li zadat, že FORMAT() by měl mít výstup výsledků pomocí invariantní kultury, jednoduše použijte "iv" pro argument kultury (třetí argument).

Příklad 1 – Měna

Zde je příklad formátování hodnoty jako měny pomocí invariantní kultury.

SELECT FORMAT(123, 'C', 'iv') Result;

Výsledky:

+----------+
| Result   |
|----------|
| ¤123.00  |
+----------+

Výsledkem je, že výstup má zlomkovou část s desetinným místem. Před ním je také znak měny (¤), který se používá k označení blíže nespecifikované měny (jedná se o znak Unicode U+00A4).

Příklad 2 – Datum

Zde je příklad formátování data pomocí invariantní kultury spolu s krátkým formátem data.

DECLARE @date date = '2030-05-25';
SELECT FORMAT(@date, 'd', 'iv') Result;

Výsledky:

+------------+
| Result     |
|------------|
| 05/25/2030 |
+------------+

Formát krátkého data pro invariantní jazykovou verzi je MM/dd/rrrr.

Tady je to znovu, ale tentokrát to srovnám s americkou anglickou, britskou a německou (německou) kulturou.

DECLARE @date date = '2030-05-25';
SELECT 
  FORMAT(@date, 'd', 'iv') 'Invariant Culture',
  FORMAT(@date, 'd', 'en-us') 'US English',
  FORMAT(@date, 'd', 'en-gb') 'British',
  FORMAT(@date, 'd', 'de-de') 'German (Deutsch)';

Výsledky:

+---------------------+--------------+------------+--------------------+
| Invariant Culture   | US English   | British    | German (Deutsch)   |
|---------------------+--------------+------------+--------------------|
| 05/25/2030          | 5/25/2030    | 25/05/2030 | 25.05.2030         |
+---------------------+--------------+------------+--------------------+

Příklad 3 – Všechny standardní formáty data a času

Zde je další, který používá invariantní kulturu, ale tentokrát formátuji datetimeoffset hodnotu pomocí všech standardních řetězců formátu data a času podporovaných rozhraním .NET Framework.

DECLARE @date datetimeoffset, @culture char(2); 
SET @date = '2030-05-25 23:59:30.1234567 +07:00';
SET @culture = 'iv';
SELECT 
  FORMAT(@date, 'd', @culture) AS 'd',
  FORMAT(@date, 'D', @culture) AS 'D',
  FORMAT(@date, 'f', @culture) AS 'f',
  FORMAT(@date, 'F', @culture) AS 'F',
  FORMAT(@date, 'g', @culture) AS 'g',
  FORMAT(@date, 'G', @culture) AS 'G',
  FORMAT(@date, 'm', @culture) AS 'm',
  FORMAT(@date, 'M', @culture) AS 'M',
  FORMAT(@date, 'o', @culture) AS 'o',
  FORMAT(@date, 'O', @culture) AS 'O',
  FORMAT(@date, 'r', @culture) AS 'r',
  FORMAT(@date, 'R', @culture) AS 'R',
  FORMAT(@date, 's', @culture) AS 's',
  FORMAT(@date, 't', @culture) AS 't',
  FORMAT(@date, 'T', @culture) AS 'T',
  FORMAT(@date, 'u', @culture) AS 'u',
  FORMAT(@date, 'U', @culture) AS 'U',
  FORMAT(@date, 'y', @culture) AS 'y',
  FORMAT(@date, 'Y', @culture) AS 'Y';

Výsledek (při použití vertikálního výstupu):

d | 05/25/2030
D | Saturday, 25 May 2030
f | Saturday, 25 May 2030 23:59
F | Saturday, 25 May 2030 23:59:30
g | 05/25/2030 23:59
G | 05/25/2030 23:59:30
m | May 25
M | May 25
o | 2030-05-25T23:59:30.1234567+07:00
O | 2030-05-25T23:59:30.1234567+07:00
r | Sat, 25 May 2030 16:59:30 GMT
R | Sat, 25 May 2030 16:59:30 GMT
s | 2030-05-25T23:59:30
t | 23:59
T | 23:59:30
u | 2030-05-25 16:59:30Z
U | NULL
y | 2030 May
Y | 2030 May

Nefunguje invariantní kultura ve vašem systému?

Pokud se vám nedaří zprovoznit invariantní kulturu ve vašem systému, může to být způsobeno instalací starší verze rozhraní .NET Framework. Dokumentace pro rozhraní .NET Framework 4.8 výslovně uvádí, že invariantní kultura je k dispozici pomocí dvoupísmenného kódu ISO 639-1 "iv" .

U této otázky Stack Overflow však odpověď od Solomona Rutzkého naznačuje, že to mohlo být dostupné pouze z .NET 4.5.

Pokud jej nemůžete zprovoznit pomocí starší verze .NET, zkuste upgradovat na nejnovější verzi (nebo verzi z alespoň 4.5).


  1. Jak číst a interpretovat chyby SQL

  2. Implementace Optimistic Locking v Oracle

  3. Proveďte dynamický křížový dotaz

  4. Změna jazyka systému a chybových zpráv v PostgreSQL