Me sorprende no poder encontrar esta pregunta aquí ya.
Tengo una var de fecha y hora y quiero convertirla en una cadena para poder agregarla a otra cadena. Lo quiero en un formato que se pueda convertir fácilmente a una fecha y hora.
¿Cómo puedo hacer esto?
(Quiero la parte de la fecha y la parte del tiempo).
sql-server
tsql
cja
fuente
fuente
Convert
, haga doble clic para resaltar, presione Shift + F1 ... siempre la primera línea de defensa.Respuestas:
La siguiente consulta obtendrá la fecha y hora actual y la convertirá en una cadena. con el siguiente formato
yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar(25), getdate(), 120)
fuente
DateTimeOffSet
, asegúrese de ajustar lavarchar
longitud a cómo desea que se vea el resultado. Para mí, no quería la zona horaria, así que tuve que usarSELECT convert(varchar(19), sysdatetimeoffset(), 120)
Hay muchas maneras diferentes a
convert
unadatetime
a una cadena. He aquí una forma:SELECT convert(varchar(25), getdate(), 121) – yyyy-mm-dd hh:mm:ss.mmm
Ver demostración
Aquí hay un sitio web que tiene una lista de todas las conversiones:
Cómo formatear la fecha y hora en SQL Server
fuente
Puede utilizar la
convert
instrucció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 actuales en una cadena con el formato de
YYYY-MM-DD HH:MM:SS
reloj de 24 horas.Puede cambiar el número al final de la declaración a uno de muchos que cambiarán el formato de las cadenas devueltas. Puede encontrar una lista de estos códigos en MSDN en la sección de referencia CAST y CONVERT .
fuente
Hay 3 métodos diferentes dependiendo de cuál sea mi requerimiento y qué versión estoy usando.
Estos son los métodos ...
1) Usando Convertir
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) Uso de Cast (SQL Server 2008 y posteriores)
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) Uso del 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'
fuente
Además de las funciones
CAST
yCONVERT
de las respuestas anteriores, si está utilizando SQL Server 2012 y superior, utiliza la función FORMAT para convertir unDATETIME
tipo basado en una cadena.Para volver a convertir, use el opuesto
PARSE
oTRYPARSE
funciones .Los estilos de formato se basan en .NET (similar a las opciones de formato de cadena 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:
fuente
The format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)")
Use the FORMAT function for locale-aware formatting of date/time and number values as strings. For general data type conversions, use CAST or CONVERT.
Verifique la sintaxis CAST y CONVERT de t-sql:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
fuente
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'
101 - EE. UU. - MM / DD / AAAA
108 - Hora - HH: MI: SS
112 - Fecha - AAAAMMDD
121 - ODBC - AAAA-MM-DD HH: MI: SS.FFF
20 - ODBC - AAAA-MM-DD HH: MI: SS
fuente
Esto ha sido respondido por mucha gente, pero siento que la solución más simple ha quedado fuera.
SQL SERVER (creo que su 2012+) tiene equivalentes de cadena implícitos para DATETIME2 como se muestra aquí
Consulte la sección sobre "Formatos literales de cadena admitidos para datetime2".
Para responder explícitamente a la pregunta de los OP:
DECLARE @myVar NCHAR(32) DECLARE @myDt DATETIME2 SELECT @myVar = @GETDATE() SELECT @myDt = @myVar PRINT(@myVar) PRINT(@myDt)
salida:
Nota: La primera variable (
myVar
) también contiene el valor'2019-01-23 12:24:00.0000000'
. Simplemente se formateaJan 23 2019 12:24PM
debido al formato predeterminado establecido para SQL SERVER que se llama cuando lo usaPRINT
. No se tropiece aquí con eso, la cadena real en(myVer)
='2019-01-23 12:24:00.0000000'
fuente
Prueba a continuación:
DECLARE @myDateTime DATETIME SET @myDateTime = '2013-02-02' -- Convert to string now SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
fuente