How to write SQL query for date format?

Formato de Fechas en SQL y JavaScript

★★★★★Valoración: 4.72 (9434 votos)

La gestión y visualización de fechas y horas son tareas fundamentales en el desarrollo de aplicaciones y la administración de bases de datos. Frecuentemente, necesitamos presentar la información de fecha y hora en un formato específico que se adapte a los requisitos de la aplicación o a las preferencias del usuario. Este artículo explora cómo abordar el formato de fechas tanto en el entorno de la base de datos, específicamente en SQL Server, como en el lado del cliente utilizando JavaScript y la popular librería Moment.js con jQuery.

How do I format a date in yyyy mm dd in SQL Server?
HOW TO GET SQL DATE FORMAT IN SQL SERVER1Use the SELECT statement with CONVERT function and date format option for the date values needed.2To get YYYY-MM-DD use this T-SQL syntax SELECT CONVERT(varchar, getdate(), 23)3To get MM/DD/YY use this T-SQL syntax SELECT CONVERT(varchar, getdate(), 1)

Entender cómo formatear fechas correctamente es crucial para garantizar la consistencia de los datos y mejorar la experiencia del usuario al interactuar con la información temporal.

Índice de Contenido

Formato de Fechas en SQL Server con CONVERT

En SQL Server, las fechas y horas se almacenan en tipos de datos específicos como DATE, TIME, DATETIME, SMALLDATETIME, DATETIME2 y DATETIMEOFFSET. Si bien estos tipos de datos almacenan el valor de manera precisa, la forma en que se muestran por defecto en los resultados de una consulta puede no ser siempre el formato deseado.

La función principal para cambiar el formato de una fecha o hora en SQL Server es CONVERT. Esta función permite convertir una expresión de un tipo de dato a otro. Para formatear fechas, la utilizamos para convertir un tipo de dato de fecha/hora a un tipo de dato de cadena de caracteres (VARCHAR o NVARCHAR), especificando un código de estilo que define el formato de salida.

Sintaxis Básica de CONVERT para Fechas

La sintaxis general es la siguiente:

CONVERT ( data_type [ ( length ) ], expression [, style ] )

Donde:

  • data_type: El tipo de dato al que quieres convertir, en este caso, VARCHAR o NVARCHAR.
  • length: (Opcional) La longitud del tipo de dato de destino. Es recomendable especificar una longitud adecuada para evitar truncamiento.
  • expression: La columna o valor de fecha/hora que quieres formatear (por ejemplo, una columna de tipo DATETIME o la función GETDATE() para la fecha y hora actual del servidor).
  • style: (Opcional) Un valor entero que especifica el formato de la fecha o hora. Si se omite, la conversión se realiza según el formato por defecto del tipo de dato.

Los códigos de estilo son la clave para obtener el formato deseado. SQL Server ofrece una amplia variedad de estilos, cada uno representado por un número.

Ejemplos Comunes de Formato con CONVERT

Para obtener la fecha actual en diferentes formatos, puedes usar GETDATE() junto con CONVERT y el estilo correspondiente:

-- Formato YYYY-MM-DD (Estilo 23)SELECT CONVERT(VARCHAR, GETDATE(), 23);-- Formato MM/DD/YY (Estilo 1)SELECT CONVERT(VARCHAR, GETDATE(), 1);-- Formato DD/MM/YYYY (Estilo 103)SELECT CONVERT(VARCHAR, GETDATE(), 103);-- Formato YYYYMMDD (Estilo 112)SELECT CONVERT(VARCHAR, GETDATE(), 112);

Estos ejemplos muestran cómo un simple cambio en el número de estilo resulta en formatos de salida completamente diferentes.

How to convert date to dd mm yyyy format in jQuery?
If you want to format this date in the dd-mm-yyyy format, you can do so like this: var day = currentDate. getDate(); var month = currentDate.

Tabla de Estilos de Formato de Fecha y Hora en SQL Server

La siguiente tabla resume algunos de los estilos más comunes disponibles en SQL Server. Es una referencia útil para encontrar el código de estilo que necesitas.

EstiloSalida (yy)Salida (yyyy)Ejemplo de Salida (Fecha: 2023-12-17 16:23:45.547)
0, 100Mon dd yy hh:miAMMon dd yyyy hh:miAMDec 17 23 04:23PM
1, 101mm/dd/yymm/dd/yyyy12/17/23
2, 102yy.mm.ddyyyy.mm.dd23.12.17
3, 103dd/mm/yydd/mm/yyyy17/12/23
4, 104dd.mm.yydd.mm.yyyy17.12.23
5, 105dd-mm-yydd-mm-yyyy17-12-23
6, 106dd Mon yydd Mon yyyy17 Dec 23
7, 107Mon dd, yyMon dd, yyyyDec 17, 23
8, 108hh:mm:sshh:mm:ss16:23:45
9, 109Mon dd yyyy hh:mi:ss:nnnAMMon dd yyyy hh:mi:ss:nnnAMDec 17 2023 04:23:45:547PM
10, 110mm-dd-yymm-dd-yyyy12-17-23
11, 111yy/mm/ddyyyy/mm/dd23/12/17
12, 112yymmddyyyymmdd231217
13, 113dd Mon yyyy hh:mm:ss:nnn(24h)dd Mon yyyy hh:mm:ss:nnn(24h)17 Dec 2023 16:23:45:547
14, 114hh:mm:ss:nnn(24h)hh:mm:ss:nnn(24h)16:23:45:547
20, 120yyyy-mm-dd hh:mm:ss(24h)yyyy-mm-dd hh:mm:ss(24h)2023-12-17 16:23:45
21, 121yyyy-mm-dd hh:mm:ss.nnn(24h)yyyy-mm-dd hh:mm:ss.nnn(24h)2023-12-17 16:23:45.547
23-yyyy-mm-dd2023-12-17
24-hh:mm:ss16:23:45
126-yyyy-mm-ddThh:mm:ss.nnn (ISO8601)2023-12-17T16:23:45.547

Es importante notar que algunos estilos son determinísticos (siempre producen el mismo resultado para la misma entrada), mientras que otros pueden depender de la configuración de idioma del servidor. Para la mayoría de los casos, los estilos 1xx y 23 son seguros y recomendados por ser independientes del idioma.

Eliminando Caracteres Separadores con REPLACE

A veces, necesitas un formato sin separadores (como guiones o barras). Puedes lograr esto anidando la función CONVERT dentro de la función REPLACE.

-- Formato YYYYMMDD sin separadoresSELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 112), '.', '');-- Formato DDMMYYYY sin separadoresSELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 104), '.', '');-- Formato MM/DD/YYYY con guiones en lugar de barrasSELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 101), '/', '-');

Esta técnica es útil para generar cadenas de fecha compactas, a menudo utilizadas en nombres de archivos o claves.

Tipos de Datos de Fecha y Hora en SQL Server

Es fundamental conocer los tipos de datos disponibles para almacenar información temporal:

  • DATE: Solo almacena la fecha (año, mes, día).
  • TIME: Solo almacena la hora (hora, minuto, segundo y fracciones de segundo).
  • DATETIME: Almacena fecha y hora. Menor precisión que DATETIME2.
  • SMALLDATETIME: Almacena fecha y hora. Precisión al minuto.
  • DATETIME2: Almacena fecha y hora con mayor precisión y rango que DATETIME. Es el tipo recomendado para la mayoría de los casos modernos.
  • DATETIMEOFFSET: Almacena fecha, hora y la información de zona horaria.

La elección del tipo de dato correcto depende de los requisitos de precisión y rango de tu aplicación.

How to write SQL query for date format?
Use the FORMAT() function to format a date in SQL. Example: SELECT FORMAT(date_column, 'yyyy-MM-dd') FROM table_name;.

Formato de Fechas en JavaScript y jQuery

Cuando trabajas en el lado del cliente con JavaScript, a menudo necesitas mostrar fechas que provienen de la base de datos o que son generadas en el navegador. El objeto Date nativo de JavaScript proporciona métodos para obtener partes de una fecha (año, mes, día, etc.), pero formatearla en un string específico puede requerir trabajo manual o el uso de librerías.

Formato Manual con el Objeto Date de JavaScript

Puedes construir cadenas de fecha manualmente utilizando los métodos del objeto Date como getDate(), getMonth() (¡recuerda que es base 0 para los meses!), y getFullYear().

var fullDate = new Date();var day = fullDate.getDate();var month = fullDate.getMonth() + 1; // Sumar 1 porque los meses van de 0 a 11var year = fullDate.getFullYear();var formattedDate = day + '/' + month + '/' + year;console.log(formattedDate); // Salida: 17/12/2023 (si hoy fuera 17 de diciembre de 2023)

Para añadir ceros iniciales a días o meses de un solo dígito, necesitas lógica adicional:

var fullDate = new Date();var day = fullDate.getDate();var month = fullDate.getMonth() + 1;var year = fullDate.getFullYear();var twoDigitMonth = (month < 10 ? '0': '') + month; // Añade '0' si el mes es menor que 10var twoDigitDay = (day < 10 ? '0': '') + day; // Añade '0' si el día es menor que 10var currentDate = twoDigitDay + '/' + twoDigitMonth + '/' + year;console.log(currentDate); // Salida: 17/12/2023

Este enfoque funciona para formatos simples, pero se vuelve tedioso para formatos más complejos o para manejar zonas horarias y diferencias culturales.

Uso de Moment.js para Formato de Fechas en jQuery

Moment.js es una popular librería de JavaScript que simplifica enormemente la manipulación, validación y formato de fechas y horas. Aunque su desarrollo principal está en modo de mantenimiento, sigue siendo muy utilizada y es una excelente opción para manejar fechas en el lado del cliente, especialmente si ya estás usando jQuery.

Para usar Moment.js, primero debes incluir la librería en tu proyecto. Puedes hacerlo a través de un CDN:

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

Una vez incluida, puedes usar la función moment() para crear un objeto Moment a partir de una fecha (una cadena, un objeto Date, etc.) y luego el método format() para formatearlo.

How to set date format in jQuery?
APPROACH:1Firstly, add the jQuery, Moment. ...2Create an input for the date and button to submit.3Now use the moment() method to convert the date into a moment object.4Use the format() method to change the format of the date, following is the syntax for changing the format of the date to 'DD-MM-YYYY'.

La Función moment() y el Método format()

  • moment(String);: Crea un objeto Moment a partir de una cadena de fecha. Moment.js es bastante flexible al parsear cadenas, pero es mejor proporcionar un formato explícito si la cadena no está en un formato estándar ISO 8601.
  • moment().format(String);: Formatea el objeto Moment en una cadena según el patrón especificado. El patrón se define usando tokens de formato.

Tokens de Formato Comunes en Moment.js

Moment.js utiliza una serie de tokens para definir el formato de salida:

TokenDescripciónEjemplo
YYYYAño con 4 dígitos2023
YYAño con 2 dígitos23
MMMMMes completo (nombre)Diciembre
MMMMes abreviado (nombre)Dic
MMMes con 2 dígitos (con cero inicial)12
MMes sin cero inicial12
DDDía del mes con 2 dígitos (con cero inicial)17
DDía del mes sin cero inicial17
DoDía del mes con sufijo ordinal17th (en inglés)
HHHora en formato 24 horas (con cero inicial)16
hhHora en formato 12 horas (con cero inicial)04
mmMinutos (con cero inicial)23
ssSegundos (con cero inicial)45
AAM/PM en mayúsculasPM
aam/pm en minúsculaspm

Puedes combinar estos tokens para crear cualquier formato que necesites.

Ejemplo Práctico con Moment.js y jQuery

El siguiente ejemplo, basado en la información proporcionada, muestra cómo tomar una fecha de un input y mostrarla en diferentes formatos usando Moment.js y jQuery.

<!-- Asegúrate de incluir jQuery y Moment.js --><script type="text/javascript" src="https://code.jquery.com/jquery-3.6.0.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script><div> <label for="date_val">Selecciona una fecha:</label> <input type="date" id="date_val"> <button id="datebtn">Formatear</button></div><div> <p>Formato DD-MM-YYYY: <span id="format1"></span></p> <p>Formato DD MMMM YYYY: <span id="format2"></span></p> <p>Formato DD/MM/YYYY: <span id="format3"></span></p></div><script type="text/javascript">$(document).ready(function() { $("#datebtn").click(function() { var inputDate = $("#date_val").val(); if (inputDate) { // Asegúrate de que haya una fecha seleccionada var momentDate = moment(inputDate); var format1 = momentDate.format('DD-MM-YYYY'); $("#format1").text(format1); var format2 = momentDate.format('DD MMMM YYYY'); $("#format2").text(format2); var format3 = momentDate.format('DD/MM/YYYY'); $("#format3").text(format3); } else { $("#format1").text('Selecciona una fecha'); $("#format2").text('Selecciona una fecha'); $("#format3").text('Selecciona una fecha'); } });});</script>

Este código ilustra la facilidad con la que Moment.js permite tomar una fecha (en este caso, del input type="date" que suele dar un formato YYYY-MM-DD) y transformarla en diferentes representaciones de cadena con solo cambiar el argumento del método format().

La combinación de jQuery para seleccionar elementos y manejar eventos, y Moment.js para la lógica de fechas, es una práctica común y eficiente para la manipulación de fechas en el frontend.

Preguntas Frecuentes sobre Formato de Fechas

¿Cuál es el mejor formato de fecha para almacenar en la base de datos?
Generalmente, el mejor enfoque es almacenar fechas en un formato estándar e independiente del idioma, como el formato ISO 8601 (YYYY-MM-DD HH:MM:SS). En SQL Server, esto corresponde al estilo 120 o 121. Esto garantiza que los datos se almacenan de manera consistente y son fáciles de ordenar y comparar. El formato de visualización debe manejarse en la capa de presentación (aplicación).
¿Por qué los meses en JavaScript van de 0 a 11?
Es una peculiaridad histórica del diseño del objeto Date en JavaScript. Los meses se representan con un índice basado en cero, donde 0 es Enero y 11 es Diciembre. Siempre debes recordar sumar 1 al valor obtenido con getMonth() si quieres mostrar el número de mes tradicional (1-12).
¿Es Moment.js la única opción para formatear fechas en JavaScript?
No. Existen otras librerías populares como date-fns o Luxon, que son alternativas modernas a Moment.js. Para tareas simples, el objeto Date nativo puede ser suficiente si implementas la lógica de formato manualmente. Sin embargo, para manipulaciones complejas, zonas horarias o internacionalización, una librería dedicada es muy recomendable.
¿La función CONVERT de SQL Server afecta cómo se almacena la fecha?
No, la función CONVERT solo cambia la representación de la fecha para la salida de la consulta. No modifica el valor almacenado en la columna de la tabla. La fecha original permanece en su tipo de dato nativo.
¿Cómo formateo la hora en SQL Server?
La función CONVERT también se utiliza para formatear la hora. Puedes usar estilos que solo afecten la parte de la hora, como el estilo 8 (hh:mm:ss) o 14 (hh:mm:ss:nnn). Algunos estilos (como 0, 9, 13, 20, 21, 22, 25-30, 100, 109, 113, 120, 121, 126, 127) formatean tanto la fecha como la hora.

Manejar el formato de fechas es una habilidad esencial tanto en el backend como en el frontend. En SQL Server, la función CONVERT con sus diversos estilos ofrece gran flexibilidad para obtener la representación de cadena deseada directamente en la consulta. En JavaScript y jQuery, el objeto Date proporciona las bases, pero librerías como Moment.js simplifican enormemente las tareas de formato complejas. Almacenar fechas de forma estándar en la base de datos y aplicar el formato en la capa de presentación adecuada son prácticas recomendadas para mantener tus aplicaciones robustas y fáciles de mantener.

Si quieres conocer otros artículos parecidos a Formato de Fechas en SQL y JavaScript puedes visitar la categoría Bases de datos.

Ivan

Soy un entusiasta de la tecnología con especialización en bases de datos, particularmente en MySQL. A través de mis tutoriales detallados, busco desmitificar los conceptos complejos y proporcionar soluciones prácticas a los desafíos cotidianos relacionados con la gestión de datos

Aprende mas sobre MySQL

Subir