SQLShack
Introducción
Una tarea común para los novatos es aprender a hacer un SQL convertir fecha y trabajar para convertirlas fecha a otros tipos de datos o convertir otros tipos de datos a Fecha.
Aquí en este artículo vamos a explicar cómo trabajar y convertir fechas a diferentes formatos o viceversa.
Requisitos
- SQL Server instalado. A partir de SQL Server 2008
Ejemplo
El primer ejemplo será sencillo, tenemos una columna varchar con una fecha en una tabla, pero necesitamos convertir la varchar a fecha. Tenemos que hacer un SQL convert date.
Aquí está el script para crear la tabla con los datos:
1
2
3
4
5
6
7
8
9
10
11
12
|
CREAR TABLA .(
NOT NULL,
(100) NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON
) ON
GO
INSERT . (, ) VALUES (1, N’02-03-2005′)
INSERT . (, ) VALORES (2, N’03-05-2006′)
INSERT . (, ) VALUES (3, N’04-05-2011′)
|
Queremos convertir la columna fecha de nvarchar(100) a una fecha.
Para ello, vamos a intentar modificar el diseño de la tabla:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/ssms-design-table.png)
Vamos a intentar cambiar el Tipo de Datos a smalldatetime:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-varchar-to-smalldatime-in-ssms.png)
Recibirás el siguiente mensaje de error:
No se permite guardar los cambios. Los cambios que ha realizado requieren que las siguientes tablas se eliminen y se vuelvan a crear. Ha realizado cambios en una tabla que no se puede volver a crear o ha activado la opción Impedir guardar cambios que requieran que se vuelva a crear la tabla.
Para solucionar este error, en SSMS vaya al menú Herramientas > Opciones:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/change-options-in-ssms.png)
En Opciones, vaya a Diseñadores >Diseñadores de tablas y bases de datos y desmarque la opción Impedir guardar cambios que requieran que se vuelva a crear la tabla:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/uncheck-prevent-saving-changes-that-require-table.png)
Esta opción deshabilitará para evitar guardar la recreación de la tabla. Cuando se modifica el tipo de datos de la columna, se requiere la recreación de la tabla.
Ahora, puede guardar el diseño y su tabla se convertirá en fecha y la fecha de conversión de SQL se completa:
![](https://www.sqlshack.com/wp-content/uploads/2019/04/sql-convert-date-date-time-results-after-convert.png)
Funciones de conversión
T-SQL contiene funciones para convertir tipos de datos. Vamos a utilizar CAST y CONVERT para hacer una fecha de conversión de SQL.
Empecemos con CAST primero:
Cómo convertir de varchar, nvarchar, char, nchar a sql date usando CAST
El siguiente ejemplo, mostrará cómo convertir caracteres a un tipo de fecha datetime usando la función CAST:
1
2
|
declare @vardate varchar(100)=’03-04-2016′
select CAST(@vardate AS datetime) AS dataconverted;
|
El ejemplo declara una variable llamada vardate y luego esta variable que es un varchar se convierte a datetime utilizando la función CAST.
Nota: Para más información sobre la función CAST, consulte este enlace: CAST y CONVERT (Transact-SQL)
Cómo hacer un SQL convertir fecha de varchar, nvarchar, char, nchar a fecha utilizando CONVERT
CONVERT es una función que puede hacer lo mismo que CAST en el escenario anterior.
1
2
|
declare @vardate varchar(100)=’03-04-2016′
select CONVERT(datetime, @vardate) as dataconverted
|
El código T-SQL está haciendo lo mismo que cast, pero está utilizando la función CONVERT. La ventaja de CONVERT es que puedes cambiar fácilmente el formato de la fecha usando el argumento de estilo.
Por ejemplo, si quieres la fecha en el formato ISO, puedes usar la siguiente sentencia T-SQL:
1
|
select CONVERT(nvarchar(30),getdate(), 121) as isoformat
|
Cómo convertir la fecha sql en diferentes formatos en T-SQL
El siguiente ejemplo muestra cómo convertir el formato de la fecha en diferentes formatos.
Para el formato de Japón:
1
|
select CONVERT(nvarchar(30),getdate(), 111) as Japanformat
|
Para el formato de EEUU:
1
|
select CONVERT(nvarchar(30),getdate(), 110) as USAformat
|
Para el formato ANSI:
1
|
select CONVERT(nvarchar(30),getdate(), 102) as ANSIformat
|
Para el formato británico:
1
|
select CONVERT(nvarchar(30),getdate(), 103) as Britishformat
|
Para el formato alemán:
1
|
select CONVERT(nvarchar(30),getdate(), 104) as Germanformat
|
Para el formato italiano:
1
|
select CONVERT(nvarchar(30),getdate(), 105) as Italianformat
|
Para el formato europeo por defecto:
1
|
select CONVERT(nvarchar(30),getdate(), 113) as EuropeDefaultformat
|
Para ODBC Canonical:
1
|
select CONVERT(nvarchar(30),getdate(), 120) as ODBCCanonicalformat
|
Siempre tienes la opción de utilizar la función FORMAT para obtener la fecha en el formato que quieras:
1
|
SELECT FORMAT( getdate(), ‘dd/MM/yy’)
|
FORMAT es más fácil para manejar las fechas y usar el formato de tu preferencia, porque no necesitas conocer el estilo. Sin embargo, en mi experiencia veo mucho código usando las funciones CAST y CONVERT por lo que, es mejor conocerlas.
Nota: Para más información sobre la función FORMAT, consulta este enlace: FORMAT (Transact-SQL)
Problemas relacionados con las operaciones de conversión de fecha de SQL
Cuando se intenta convertir a fecha no siempre es posible. El siguiente ejemplo muestra un error común:
1
2
|
declare @vardate varchar(100)=’11242016′
select CONVERT(datetime, @vardate) as dataconverted
|
El mensaje de error es el siguiente:
Msg 242, Nivel 16, Estado 3, Línea 22
La conversión de un tipo de datos varchar a un tipo de datos datetime resultó en un valor fuera de rango.
Se necesitan separadores para la fecha como un «/», un «.» o un «-«.
El siguiente ejemplo, modifica la cadena de 11242016 a 11-24-2016 y luego la convierte a fecha sql:
1
2
3
4
5
|
declare @vardate varchar(100)=’11242016′
set @vardate= SUBSTRING(@vardate, 1, 2)+’-‘+ SUBSTRING(@fecha_de_varo, 3, 2)+’-‘+SUBSTRING(@vardate, 5, 4)
select CONVERT(date, @vardate) as dataconverted
|
Usamos la subcadena para concatenar el «-» para usar un formato de fecha aceptable y luego usamos la función CONVERT para convertir los caracteres a fecha sql.
Tipos de datos de fecha
En SQL Server, hay varios tipos de datos de fecha:
- Time devuelve las horas, minutos, segundos y nanosegundos (hh:mm:ss.nnnnnn)
- Date devuelve el año, los meses y los días (aaaa-mm-dd)
- Datetime devuelve datos con este formato: YYYY-MM-DD hh:mm:ss
- Smalldatetime devuelve la fecha con este formato: YYYY-MM-DD hh:mm:ss
- Datetime2 es similar a Datetime, pero tiene más precisión (YYYY-MM-DD hh:mm:ss)
- Datetimeoffset tiene la precisión de datetime2, pero se utiliza para zonas horarias en UTC
SQL convierte fecha a entero
Si se utiliza el CONVERT o CAST para convertir un datetime a entero, devolverá el número de días desde 1900 hasta la fecha proporcionada.
Por ejemplo, el siguiente código T-SQL mostrará el número de días desde 1900 hasta hoy:
1
|
SELECT CONVERT(INT, GETDATE())
|
También puede convertir a enteros el año, los meses, los días, etc. de un valor datetime. El siguiente código muestra cómo almacenar en variables enteras el día, el mes y el año de un valor datetime:
1
2
3
4
5
|
declare @year int = year(getdate())
declare @mes int = mes(getdate())
declare @day int = day(getdate())
select @año como año,@mes como mes,@día como día
|
Preguntas comunes sobre SQL convertir fecha en SQL Server
Nota: El siguiente enlace contiene preguntas frecuentes sobre funciones y fechas en SQL Server: Preguntas frecuentes sobre fechas en SQL Server
Conclusiones
En este artículo, aprendimos a hacer un SQL convert date en SQL Server. Aprendimos cómo modificar el tipo de datos en una tabla, cómo utilizar las funciones CAST, CONVERT y FORMAT. También aprendimos sobre los diferentes tipos de datos de SQL.
- Autor
- Puestos recientes
![](https://s33046.pcdn.co/wp-content/uploads/gravatar/danielcalbimonte.jpg)
Ha trabajado para el gobierno, empresas petroleras, sitios web, revistas y universidades de todo el mundo. Daniel también habla regularmente en conferencias de SQL Servers y blogs. Escribe materiales de formación de SQL Server para los exámenes de certificación.
También ayuda con la traducción de artículos de SQLShack al español
Ver todos los posts de Daniel Calbimonte
![](https://s33046.pcdn.co/wp-content/uploads/gravatar/danielcalbimonte.jpg)
- Preguntas de la entrevista SQL – 3 de septiembre, 2020
- Certificaciones SQL – 7 de agosto de 2020
- Historia de TSQL – 3 de septiembre de 2019