sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué es una cadena de formato en SQL Server?

En SQL Server, el FORMAT() le permite dar formato a los valores de fecha/hora y número como una cadena formateada al pasar una "cadena de formato" como segundo argumento (el primer argumento es el valor que se está formateando).

Aquí hay un ejemplo de esta función en acción:

FORMAT(@date, 'dd/MM/yyyy');

En este caso, la cadena de formato es dd/MM/yyyy .

Esta cadena de formato particular especifica que @date El valor debe formatearse con un día de dos dígitos, un mes de dos dígitos y un año de cuatro dígitos, en ese orden, y con barras diagonales como separadores.

Esto resultaría en algo como esto:

21/05/2019

Una cadena de formato es una cadena que contiene uno o más especificadores de formato predefinidos , que son caracteres individuales o grupos de caracteres que definen cómo debe formatearse la salida.

SQL Server solo acepta cadenas de formato compatibles con .NET Framework.

Una cadena de formato puede ser una cadena de formato estándar o una cadena de formato personalizado. Así es como funcionan:

  • Una cadena de formato estándar es una cadena de formato predefinido. Contiene un especificador de formato único que se interpreta como la representación de un determinado formato predefinido. Las cadenas de formato estándar son en realidad alias para cadenas de formato personalizado. Sin embargo, la cadena de formato personalizado real utilizada a menudo dependerá de la cultura.
  • Una cadena de formato personalizado por otro lado, consta de uno o más especificadores de formato personalizados que, en combinación entre sí, definirán el formato. Esto le permite mucha más flexibilidad al definir cómo debe verse la salida.

Ejemplo 1:cadena de formato estándar

Aquí hay un ejemplo para demostrar cómo funcionan las cadenas de formato estándar.

SELECT FORMAT(1234, 'C') AS Result;

Resultado:

+-----------+
| Result    |
|-----------|
| $1,234.00 |
+-----------+

En este ejemplo, C es la cadena de formato. En este caso, es una cadena de formato numérico estándar que consta de un único especificador de formato. Este especificador de formato particular se usa para representar una cantidad de moneda.

También podríamos obtener el mismo resultado usando una cadena de formato numérico personalizado.

Ejemplo 2:cadena de formato personalizado

Este ejemplo produce el mismo resultado que el ejemplo anterior. La diferencia es que, en este ejemplo, uso un personalizado cadena de formato en lugar de una estándar.

SELECT FORMAT(1234, '$#,###.00') AS Result;

Resultado:

+-----------+
| Result    |
|-----------|
| $1,234.00 |
+-----------+

Una cadena de formato personalizado le permite crear su propio formato personalizado. Puede combinar cadenas con especificadores de formato para crear su propio formato personalizado.

En este ejemplo, uso el # especificador de formato, que es un marcador de posición para un dígito. Si un dígito no está presente, no aparece ningún dígito en la cadena resultante.

También uso el 0 especificador de formato, que también es un marcador de posición para cualquier dígito. Pero en este caso, si no hay un dígito presente, se usa un cero en su lugar.

También incluyo el $ , , y . cadenas literales en la cadena de formato. Estos se incluyen en la salida exactamente como son.

Si reducimos el número de entrada, podemos ver cómo el resultado es diferente entre el 0 y # especificadores de formato y cómo se comparan con el C especificador de formato estándar del ejemplo anterior:

SELECT 
  FORMAT(34, 'C') AS 'C',
  FORMAT(34, '$0,000.00') AS '0',
  FORMAT(34, '$#,###.00') AS '#';

Resultado:

+--------+-----------+--------+
| C      | 0         | #      |
|--------+-----------+--------|
| $34.00 | $0,034.00 | $34.00 |
+--------+-----------+--------+

Como puede imaginar, las cadenas de formato personalizado brindan mucha más flexibilidad que las cadenas de formato estándar.

Sin embargo, hay muchos escenarios en los que las cadenas de formato estándar pueden ser más eficaces, especialmente cuando se trata de producir resultados dinámicos que tengan en cuenta la cultura. Más sobre cultura pronto.

Ejemplo 3:formato de fecha y hora

Los valores de fecha/hora también ofrecen la opción de cadenas de formato estándar o personalizadas. Este es un ejemplo de un valor de fecha/hora al que se le da formato con una cadena de formato estándar, así como algunas cadenas de formato personalizado.

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'd') AS 'd',
  FORMAT(@date, 'M/d/yyyy') AS 'M/d/yyyy',
  FORMAT(@date, 'dd/MM/yy') AS 'dd/MM/yy',
  FORMAT(@date, 'ddd, MMM dd, yy') AS 'ddd, MMM dd, yy',
  FORMAT(@date, 'dddd, dd MMMM yyyy') AS 'dddd, dd MMMM yyyy';

Resultado:

+----------+------------+------------+-------------------+------------------------+
| d        | M/d/yyyy   | dd/MM/yy   | ddd, MMM dd, yy   | dddd, dd MMMM yyyy     |
|----------+------------+------------+-------------------+------------------------|
| 5/1/2080 | 5/1/2080   | 01/05/80   | Wed, May 01, 80   | Wednesday, 01 May 2080 |
+----------+------------+------------+-------------------+------------------------+

El primero usa una cadena de formato estándar y los otros cuatro usan cadenas de formato personalizado.

Para obtener una lista completa de cadenas de formato de fecha y hora disponibles, consulte lo siguiente:

  • Lista de cadenas de formato estándar de fecha/hora
  • Lista de cadenas de formato de fecha/hora personalizado

Ejemplo 4 – Cultura

Los resultados de las cadenas de formato a veces pueden depender de la referencia cultural que se use. Por ejemplo, en los EE. UU., un formato de fecha corta se representa como 'M/d/yyyy', pero en Gran Bretaña se representa como 'dd/MM/yyyy'.

De forma predeterminada, se utiliza el idioma de la sesión actual para definir la cultura. Sin embargo, el FORMAT() le permite anular esto.

La sintaxis de la función es así:

FORMAT ( value, format [, culture ] )

Por lo tanto, le permite especificar una cultura como argumento opcional.

Aquí hay un ejemplo de cómo diferentes culturas pueden dar como resultado una cadena de formato único que produce varios formatos diferentes.

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'd', 'en-us') AS 'US English',
  FORMAT(@date, 'd', 'en-gb') AS 'British',
  FORMAT(@date, 'd', 'de-de') AS 'German',
  FORMAT(@date, 'd', 'jp-jp') AS 'Japanese';

Resultado:

+--------------+------------+------------+------------+
| US English   | British    | German     | Japanese   |
|--------------+------------+------------+------------|
| 5/1/2080     | 01/05/2080 | 01.05.2080 | 05/01/2080 |
+--------------+------------+------------+------------+

En este caso, los cuatro países usan la d cadena de formato de fecha y hora estándar. Sin embargo, todos utilizan un argumento cultural diferente. Esto produce un resultado diferente para adaptarse a cada cultura.

Y no es solo estándar cadenas de formato que están influenciadas por la cultura. La cultura también puede influir en el resultado de personalizar Cadenas de formato. He aquí un ejemplo:

DECLARE @date datetime2(7);
SET @date = '2080-05-01 23:09:08.1234567';
SELECT 
  FORMAT(@date, 'dddd, dd MMMM', 'en-us') AS 'US English',
  FORMAT(@date, 'dddd, dd MMMM', 'de-de') AS 'German',
  FORMAT(@date, 'dddd, dd MMMM', 'vi') AS 'Vietnamese',
  FORMAT(@date, 'dddd, dd MMMM', 'sv') AS 'Swedish';

Resultado:

+-------------------+------------------+----------------------+----------------+
| US English        | German           | Vietnamese           | Swedish        |
|-------------------+------------------+----------------------+----------------|
| Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj |
+-------------------+------------------+----------------------+----------------+

También tiene la opción de usar la referencia cultural invariable (iv ). La cultura invariable es insensible a la cultura. Está asociado con el idioma inglés pero no con ningún país/región. Para obtener más información y ejemplos, consulte Cómo especificar la referencia cultural invariable al usar FORMAT() en SQL Server.