No SQL Server, você pode usar o
FORMAT()
função para formatar valores de data/hora e número como strings. Em particular, a função fornece formatação "com reconhecimento de localidade" e a função aceita um argumento "cultura", que permite especificar uma cultura ou idioma a ser usado para o formato real. Por exemplo, você pode passar en-us
para garantir que os resultados sejam formatados no formato inglês dos EUA. O argumento culture é opcional, portanto, se você não o fornecer, a saída será determinada pelo idioma da sessão atual.
O
FORMAT()
A função aceita qualquer cultura suportada pelo .NET Framework como um argumento (você não está limitado aos idiomas explicitamente suportados pelo SQL Server). Uma das culturas suportadas pelo .NET Framework é a cultura invariável. A cultura invariável é insensível à cultura. Mais especificamente, essa cultura está associada ao idioma inglês, mas não a nenhum país/região.
Para especificar que
FORMAT()
deve produzir os resultados usando a cultura invariável, basta usar "iv"
para o argumento da cultura (o terceiro argumento). Exemplo 1 – Moeda
Aqui está um exemplo de formatação de um valor como moeda usando a cultura invariável.
SELECT FORMAT(123, 'C', 'iv') Result;
Resultados:
+----------+ | Result | |----------| | ¤123.00 | +----------+
Isso resulta na saída com uma parte fracionária com uma casa decimal. Também é precedido pelo sinal de moeda (¤), que é usado para denotar uma moeda não especificada (este é o caractere Unicode U+00A4).
Exemplo 2 – Data
Aqui está um exemplo de formatação de uma data usando a cultura invariável junto com um formato de data curto.
DECLARE @date date = '2030-05-25'; SELECT FORMAT(@date, 'd', 'iv') Result;
Resultados:
+------------+ | Result | |------------| | 05/25/2030 | +------------+
O formato de data abreviado para a cultura invariável é MM/dd/aaaa.
Aqui está novamente, mas desta vez eu comparo com as culturas inglesa, britânica e alemã (deutsch) dos EUA.
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)';
Resultados:
+---------------------+--------------+------------+--------------------+ | Invariant Culture | US English | British | German (Deutsch) | |---------------------+--------------+------------+--------------------| | 05/25/2030 | 5/25/2030 | 25/05/2030 | 25.05.2030 | +---------------------+--------------+------------+--------------------+
Exemplo 3 - Todos os formatos padrão de data e hora
Aqui está outro usando a cultura invariável, mas desta vez eu formato um datetimeoffset value usando todas as cadeias de caracteres de formato de data e hora padrão suportadas pelo .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';
Resultado (usando saída vertical):
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
A cultura invariável não funciona no seu sistema?
Se você não conseguir fazer com que a cultura invariável funcione em seu sistema, pode ser devido à instalação de uma versão mais antiga do .NET Framework. A documentação do .NET Framework 4.8 declara explicitamente que a cultura invariável está disponível usando seu código de duas letras ISO 639-1
"iv"
. No entanto, nesta pergunta do Stack Overflow, a resposta de Solomon Rutzky sugere que isso pode estar disponível apenas no .NET 4.5.
Se você não conseguir fazê-lo funcionar usando uma versão anterior do .NET, tente atualizar para a versão mais recente (ou uma versão de pelo menos 4.5).