Base de datos.Guía

En SQL Server, se puede utilizar la función T-SQL FORMAT() para devolver valores como números y fechas como cadenas formateadas.

Se proporciona el valor que se va a formatear y se especifica el formato a utilizar. La función acepta un argumento opcional que le permite especificar una cultura a utilizar cuando se formatea el valor.

Sintaxis

La sintaxis es la siguiente:

FORMAT ( value, format )

Donde value es el valor que quieres formatear, y format es una cadena de formato válida que especifica el formato deseado.

El argumento opcional culture puede utilizarse para especificar una cultura. Si se omite, se utiliza el idioma de la sesión actual.

La función FORMAT no es determinista.

Ejemplo 1 – Formatear un número

Aquí tienes un ejemplo de cómo formatear un número:

SELECT FORMAT(1, 'N') AS Result;

Resultado:

+----------+| Result ||----------|| 1.00 |+----------+

En este caso, he utilizado N como cadena de formato. Este es un especificador de formato numérico estándar para la salida del valor como un número. Este especificador de formato en particular hace que la salida se formatee con dígitos integrales y decimales, separadores de grupo y un separador decimal con signo negativo opcional. Este especificador de formato no distingue entre mayúsculas y minúsculas, por lo que tanto N como n están bien.

Ejemplo 2 – Formatear a una moneda

Aquí hay un ejemplo de formatear un número como moneda:

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

Resultado:

+----------+| Result ||----------|| $1.00 |+----------+

Más formatos numéricos

Hay muchas más cadenas de formato que se pueden utilizar con la función FORMAT(). Por ejemplo, hay cadenas de formato para porcentajes, punto fijo, exponencial (científico), hexadecimal, y más.

Las cadenas de formato numérico se separan en estándar y personalizadas.

Los dos artículos siguientes enumeran todas las cadenas de formato numérico, incluyendo ejemplos:

  • Cadenas de formato numérico estándar
  • Cadenas de formato numérico personalizado
  • También consulte Cómo formatear números en SQL Server para ver más ejemplos de formato de números.

    Ejemplo 3 – Formatear una fecha

    Aquí hay un ejemplo de formatear una fecha:

SELECT GETDATE() AS 'Unformatted Date', FORMAT( GETDATE(), 'D') AS 'Formatted Date';

Resultado:

+-------------------------+------------------------+| Unformatted Date | Formatted Date ||-------------------------+------------------------|| 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 |+-------------------------+------------------------+

En este caso, he utilizado D que especifica un patrón de fecha largo.

Más formatos de fecha

Hay muchas más cadenas de formato que se pueden utilizar para dar formato a las fechas. Al igual que con las cadenas de formato numérico, las cadenas de formato de fecha y hora están separadas en estándar y personalizadas, por lo que puedes construir tus propios formatos personalizados, o puedes confiar en uno estándar.

Los dos artículos siguientes enumeran todas las cadenas de formato de fecha y hora, incluyendo ejemplos:

  • Cadenas de formato de fecha y hora estándar
  • Cadenas de formato de fecha y hora personalizadas
  • También consulte Cómo dar formato a la fecha & Hora en SQL Server para ver más ejemplos.

    Ejemplo 4 – El argumento de cultura opcional

    Aquí hay un ejemplo de uso del argumento culture para devolver un valor en varias monedas:

SELECT FORMAT(1, 'C', 'fr-FR') AS 'France', FORMAT(1, 'C', 'th-TH') AS 'Thailand', FORMAT(1, 'C', 'ja-JP') AS 'Japan';

Resultado:

+----------+------------+---------+| France | Thailand | Japan ||----------+------------+---------|| 1,00 € | ฿1.00 | ¥1 |+----------+------------+---------+

La función FORMAT() acepta cualquier cultura soportada por el .NET Framework como argumento; no se limita a los idiomas admitidos explícitamente por SQL Server.

Si no proporciona este argumento, se utiliza el idioma de la sesión actual.

Para ver más ejemplos, consulte Cómo la configuración del idioma puede afectar a los resultados de su FORMAT().

Ejemplo 5 – Argumento de cultura no válido

Si proporcionas una cultura no válida, obtendrás un error:

SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';

Resultado:

The culture parameter 'oop-SS!' provided in the function call is not supported.

Ejemplo 6 – Valor de formato no válido

Sin embargo, para otros errores, la función devuelve NULL. Por ejemplo, esto es lo que ocurre si proporciono un valor no válido para ser formateado:

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

Resultado:

+----------+| Result ||----------|| NULL |+----------+

En este caso, estaba intentando formatear una fecha en una moneda, y por lo tanto el resultado fue NULL.

Tipos de datos válidos

FORMAT() se basa en la presencia del Common Language Runtime (CLR) de .NET Framework, y utiliza las reglas de formato del CLR.

Los siguientes tipos de datos pueden formatearse con la función FORMAT(). Esta lista contiene los tipos de datos aceptables para la cadena de entrada junto con sus tipos equivalentes de mapeo de .NET Framework.

Fecha y Hora

Categoría Tipo .NET type
Numérico bigint Int64
Numérico int Int32
Numérico smallint Int16
Numérico tinyint Byte
Numérico decimal SqlDecimal
Numérico numérico SqlDecimal
Numérico float Double
Numérico Real Simple Numérico dinero Decimal Numérico dinero Decimal
Fecha y Hora Fecha Fecha
Fecha y Hora Hora TimeSpan
tiempo de la fecha Tiempo de la fecha
Fecha y Hora tiempo de la fecha Tiempo de la fecha
Fecha y Hora datetime2 DateTime
Fecha y Hora datetimeoffset DateTimeOffset

Escapar los dos puntos y los puntos para el tipo de datos ‘time’

Cuando se utiliza FORMAT, los dos puntos y los puntos deben ser escapados (esto se adhiere a las reglas de formato del CLR). Por lo tanto, cuando la cadena de formato (segundo parámetro) contiene dos puntos o un punto, los dos puntos o el punto deben escaparse con una barra invertida cuando un valor de entrada (primer parámetro) es del tipo de datos de tiempo.

Ejemplo:

SELECT CAST('12:15' AS time) AS 'Unformatted Data', FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';

Resultado:

+--------------------+-------------+-----------+| Unformatted Data | Unescaped | Escaped ||--------------------+-------------+-----------|| 12:15:00 | NULL | 12.15 |+--------------------+-------------+-----------+

Así que, como se esperaba, la cadena sin escapar devuelve NULL.

Como se ha mencionado, esto sólo se aplica al tipo de datos de tiempo. Si cambiamos el valor de entrada por otro tipo de datos, no necesitamos escaparlo:

SELECT CAST('12:15' AS datetime) AS 'Unformatted Data', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';

Resultado:

+-------------------------+-------------+-----------+| Unformatted Data | Unescaped | Escaped ||-------------------------+-------------+-----------|| 1900-01-01 12:15:00.000 | 12.15 | 12.15 |+-------------------------+-------------+-----------+

En este caso, el valor de entrada es datetime, y por tanto, el resultado está bien sin escaparlo.

También puede utilizar la barra invertida para escapar cualquier otro carácter que desee incluir en la cadena de resultados, que de otro modo se interpretaría como un especificador de formato. Preceder un carácter con una barra invertida significa que el siguiente carácter es un literal de carácter que debe incluirse en la cadena de resultado sin cambios.

En una cadena de formato de fecha y hora personalizada, el dfFghHKmMstyz:, o / se interpretan como especificadores de formato personalizados en lugar de como caracteres literales.

En una cadena de formato numérico personalizado, el #0.,%, y se interpretan como especificadores de formato y no como caracteres literales. Los símbolos E en mayúsculas y minúsculas, así como los símbolos + y - también pueden interpretarse como especificadores de formato, dependiendo de su posición dentro de la cadena de formato.

Si necesita incluir una barra invertida en la cadena de resultado, escápela con otra barra invertida.

Remover

La función FORMAT() no puede ser remotada ya que depende de la presencia del CLR. Remover una función que requiere el CLR, podría causar un error en el servidor remoto.

Cuándo utilizar la función FORMAT()

Microsoft recomienda que la función FORMAT() se utilice para formatear valores de fecha/hora y números como cadenas de caracteres con conocimiento de la configuración local, y que para las conversiones de tipos de datos generales se utilice la función CAST() o la función CONVERT() en su lugar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *