Pregunta Cómo convertir una fecha y hora en una cadena en T-SQL


Me sorprende no poder encontrar esta pregunta aquí.

Tengo un var de fecha y hora y quiero convertirlo en una cadena para poder agregarlo a otra cadena. Lo quiero en un formato que se pueda convertir fácilmente a una fecha nueva.

¿Cómo puedo hacer esto?

(Quiero la parte de la fecha y la parte del tiempo).


73
2018-02-22 17:24


origen


Respuestas:


La siguiente consulta obtendrá la fecha actual y la convertirá en cadena. con el siguiente formato
yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 

118
2018-02-22 17:25



Hay muchas formas diferentes de convert un datetime a una cadena. Aquí hay una manera:

SELECT convert(varchar(25), getdate(), 121)  – yyyy-mm-dd hh:mm:ss.mmm

Ver Manifestación

Aquí hay un sitio web que tiene una lista de todas las conversiones:

Cómo formatear fecha y hora en SQL Server 


25
2018-02-22 17:26



Puedes usar el convert declaración en Microsoft SQL Server para convertir una fecha en una cadena. Un ejemplo de la sintaxis utilizada sería:

SELECT convert(varchar(20), getdate(), 120)

Lo anterior devolvería la fecha y hora actual en una cadena con el formato de YYYY-MM-DD HH:MM:SS en 24 horas reloj.

Puede cambiar el número al final de la instrucción a uno de muchos que cambiará el formato de cadenas devuelto. Se puede encontrar una lista de estos códigos en MSDN en el CAST y CONVERTIR sección de referencia.


7
2018-02-22 17:28



Existen 3 métodos diferentes dependiendo de cuál es mi requerimiento y qué versión estoy usando.

Aquí están los métodos ...

1) Usando Convert

DECLARE @DateTime DATETIME = GETDATE();
--Using Convert
SELECT
    CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime'
    ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate'
    ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'

2) Usando Cast (SQL Server 2008 y más allá)

SELECT
    CAST(@DateTime AS DATETIME2) AS 'myDateTime'
    ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
    ,CAST(@DateTime AS DATE) AS 'myDate'
    ,CAST(@DateTime AS TIME) AS 'myTime'
    ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'

3) Utilizando el tipo de datos de caracteres de longitud fija

DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120);
DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120);

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'

5
2018-02-19 03:42



Además de CAST y CONVERT funciones en las respuestas anteriores, si está utilizando SQL Server 2012 y superior, use el FORMATO función para convertir un DATETIME basado en el tipo de una cadena.

Para convertir de nuevo, usa lo opuesto PARSE o TRYPARSE funciones.

Los estilos de formato se basan en .NET (similar a las opciones de formato de cadenas del método ToString ()) y tiene la ventaja de ser consciente de la cultura. p.ej.

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')

Resultados:

2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000

3
2018-06-17 13:33



Verifique la sintaxis CAST y CONVERT de t-sql:

http://msdn.microsoft.com/en-us/library/ms187928.aspx 


1
2018-02-22 17:28



Pruebe a continuación:

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)

0
2018-02-22 18:09