yyyy ejemplo convert cast sql-server tsql

sql server - ejemplo - ¿Cómo obtener una fecha en formato YYYY-MM-DD desde un campo datetime TSQL?



format sql server 2008 (21)

A partir de SQL Server 2012 (la pregunta original es para 2000):

SELECT FORMAT(GetDate(), ''yyyy-MM-dd'')

¿Cómo recupero una fecha de SQL Server en formato AAAA-MM-DD? Necesito esto para trabajar con SQL Server 2000 y más. ¿Hay una forma sencilla de realizar esto en SQL Server o sería más fácil convertirlo programáticamente después de recuperar el conjunto de resultados?

He leído CAST y CONVERT en Microsoft Technet, pero el formato que quiero no aparece en la lista y cambiar el formato de fecha no es una opción.


De otra manera ...

CONVERT(varchar, DATEPART(yyyy, @datetime)) + ''/'' + CONVERT(varchar, DATEPART(mm, @datetime)) + ''/'' + CONVERT(varchar, DATEPART(dd, @datetime))


Desde SQL Server 2008 puede hacer esto: CONVERT(date,getdate())



En caso de que alguien quiera hacerlo al revés y encuentre esto.

select convert(datetime, ''12.09.2014'', 104)

Esto convierte una cadena en el formato de fecha alemán en un objeto de fecha y hora.

¿Por qué 104? Consulte aquí: ISO8601


En su enlace de lanzamiento y conversión, use el estilo 126 de esta manera:

CONVERT (varchar(10), DTvalue, 126)

Esto trunca el tiempo. Su requisito para tenerlo en aaaa-mm-dd significa que debe ser un tipo de datos de cadena y una fecha y hora.

Francamente, lo haría con el cliente a menos que tenga buenas razones para no hacerlo.


Esta solución funciona para mí, simple y eficaz (con 126 también)

CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)


La función de convert con el especificador de formato 120 le dará el formato "aaaa-MM-dd HH: mm: ss", así que solo tiene que limitar la longitud a 10 para obtener solo la parte de la fecha:

convert(varchar(10), theDate, 120)

Sin embargo, el formato de las fechas generalmente es mejor hacerlo en la capa de presentación que en la base de datos o la capa de negocios. Si devuelve la fecha formateada desde la base de datos, entonces el código del cliente tiene que analizarla nuevamente en una fecha si necesita hacer algún cálculo en ella.

Ejemplo en C #:

theDate.ToString("yyyy-MM-dd")


Para YYYYMMDD intente

select convert(varchar,getDate(),112)

Sólo he probado en SQLServer2008.


Para aquellos que también quisieran la parte del tiempo (yo lo hice), el siguiente fragmento de código puede ayudar

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h) SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm --example -- 2008-10-02T10:52:47.513


Si el formato de la fecha de origen está desordenado, intente algo como:

select convert(nvarchar(50),year(a.messedupDate))+''-''+ (case when len(convert(nvarchar(50),month(a.messedupDate)))=1 then ''0''+ convert(nvarchar(50),month(a.messedupDate))+''-'' else convert(nvarchar(50),month(a.messedupDate)) end)+ (case when len(convert(nvarchar(50),day(a.messedupDate)))=1 then ''0''+ convert(nvarchar(50),day(a.messedupDate))+''-'' else convert(nvarchar(50),day(a.messedupDate)) end) from messytable a


Si quieres usarlo como una fecha en lugar de una varchar después, no olvides volver a convertirlo:

select convert(datetime,CONVERT(char(10), GetDate(),126))


También puede utilizar. Esto es mediante el uso del nuevo datatype DATE . Puede que no funcione en todas las versiones anteriores, pero se ha simplificado enormemente para usar en versiones posteriores.

SELECT CAST(getdate() AS DATE) SELECT LEFT(CAST(getdate() AS DATE), 7)


Usar una sentencia CASE para cada una de las funciones de conversión / conversión siempre funciona para mí:

Reemplace tableXXXXY con su nombre de tabla y issueDate_dat con el nombre de su campo datetime en esa tabla:

SELECT issueDate_dat, CONVERT(varchar, DATEPART(yyyy, issuedate_dat)) AS issueDateYYYY , CASE WHEN (len(CONVERT(varchar, DATEPART(mm, issuedate_dat))) < 2) THEN ''0'' +CONVERT(varchar, DATEPART(mm, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(mm, issuedate_dat)) END AS issueDateMM , CASE WHEN (len(CONVERT(varchar, DATEPART(dd, issuedate_dat))) <2) THEN ''0'' +CONVERT(varchar, DATEPART(dd, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(dd, issuedate_dat)) END AS issueDateDD FROM tableXXXXY

Espero que esto haya sido útil. chagbert


Yo usaría:

CONVERT(char(10),GETDATE(),126)


SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)


IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true); cmdGetPaymentStatement.Parameters.AddWithValue("@pStartDate", DateTime.Parse("22/12/2017", culture, System.Globalization.DateTimeStyles.AssumeLocal)).IsNullable = true;


SELECT CONVERT(char(10), GetDate(),126)

Limitar el tamaño de las tajadas varchar de la parte de la hora que no desea.


SELECT Code,Description FROM TABLE -- This will Include only date part of 14th March 2010. Any date with date companents will not be considered. WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, ''2010-02-14'', 126) AND ToDate <= DATEADD(dd, 1, CONVERT(DATETIME, ''2010-03-14'', 126)) -- This will Include the whole day of 14th March 2010 --WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, ''2010-02-14'', 126) AND ToDate < DATEADD(dd, 1, CONVERT(DATETIME, ''2010-03-14'', 126))


SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008 SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02 SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy SELECT convert(varchar, getdate(), 106) -- dd mon yyyy SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy SELECT convert(varchar, getdate(), 108) -- hh:mm:ss SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM) SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd SELECT convert(varchar, getdate(), 112) -- yyyymmdd SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h) SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h) SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm


replace(convert(varchar, getdate(), 111), ''/'',''-'')

También hará truco sin "cortar cualquier cosa".