sql >> Database >  >> RDS >> Sqlserver

Hoe de invariante cultuur te specificeren bij het gebruik van FORMAT() in SQL Server

In SQL Server kunt u de FORMAT() . gebruiken functie om datum/tijd en getalwaarden op te maken als tekenreeksen. In het bijzonder biedt de functie een "locale-aware" opmaak, en de functie accepteert een "cultuur" -argument, waarmee u een cultuur of taal kunt specificeren die voor de daadwerkelijke opmaak moet worden gebruikt. U kunt bijvoorbeeld en-us . doorgeven om ervoor te zorgen dat de resultaten zijn opgemaakt in Amerikaans-Engels formaat.

Het cultuurargument is optioneel, dus als u het niet opgeeft, wordt de uitvoer bepaald door de taal van de huidige sessie.

De FORMAT() functie accepteert elke cultuur die wordt ondersteund door het .NET Framework als argument (u bent niet beperkt tot de talen die expliciet worden ondersteund door SQL Server).

Een van de culturen die door het .NET Framework worden ondersteund, is de invariante cultuur. De invariante cultuur is cultuurongevoelig. Meer specifiek wordt deze cultuur geassocieerd met de Engelse taal, maar niet met een land/regio.

Om te specificeren dat FORMAT() moet de resultaten uitvoeren met behulp van de invariante cultuur, gebruik gewoon "iv" voor het cultuurargument (het derde argument).

Voorbeeld 1 – Valuta

Hier is een voorbeeld van het opmaken van een waarde als valuta met behulp van de invariante cultuur.

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

Resultaten:

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

Dit resulteert in een uitvoer met een breukdeel met een cijfer achter de komma. Het wordt ook voorafgegaan door het valutateken (¤), dat wordt gebruikt om een ​​niet-gespecificeerde valuta aan te duiden (dit is het Unicode-teken U+00A4).

Voorbeeld 2 – Datum

Hier is een voorbeeld van het formatteren van een datum met behulp van de invariante cultuur samen met een korte datumnotatie.

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

Resultaten:

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

Het korte datumformaat voor de invariante cultuur is MM/dd/jjjj.

Hier is het weer, maar deze keer vergelijk ik het met de Amerikaanse, Engelse, Britse en Duitse (Duitse) culturen.

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)';

Resultaten:

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

Voorbeeld 3 – Alle standaard datum- en tijdnotaties

Hier is er nog een die de invariante cultuur gebruikt, maar deze keer formatteer ik een datetimeoffset waarde met behulp van alle standaard tekenreeksen voor datum- en tijdnotatie die worden ondersteund door .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';

Resultaat (met verticale uitvoer):

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

De invariante cultuur werkt niet op uw systeem?

Als het je niet lukt om de invariante cultuur op je systeem te laten werken, kan dat komen doordat er een oudere versie van het .NET Framework is geïnstalleerd. De documentatie voor het .NET Framework 4.8 stelt expliciet dat de invariante cultuur beschikbaar is met behulp van de ISO 639-1 tweeletterige code "iv" .

Op deze Stack Overflow-vraag suggereert het antwoord van Solomon Rutzky echter dat dit mogelijk alleen beschikbaar was vanaf .NET 4.5.

Als je het niet werkend krijgt met een eerdere versie van .NET, probeer dan te upgraden naar de nieuwste versie (of een versie van minimaal 4.5).


  1. MySQL Kolom hernoemen

  2. phpMyAdmin - kan geen verbinding maken - ongeldige instellingen - sinds ik een root-wachtwoord heb toegevoegd - vergrendeld

  3. Wordnet sqlite Synoniemen en voorbeelden

  4. Regex gebruiken in WHERE in Postgres