Estoy trabajando en una consulta en Sql Server 2005 donde necesito convertir un valor en DateTime
variable en una varchar
variable en yyyy-mm-dd
formato (sin parte de tiempo). ¿Cómo puedo hacer eso?
Estoy trabajando en una consulta en Sql Server 2005 donde necesito convertir un valor en DateTime
variable en una varchar
variable en yyyy-mm-dd
formato (sin parte de tiempo). ¿Cómo puedo hacer eso?
Respuestas:
Con Microsoft Sql Server:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
LEFT(.., 10)
lugar de CONVERT(CHAR(10), ...)
? También aquellos que trabajan con las versiones más nuevas de SQL Server que 2005 (!) Deben consultar la respuesta de Zar Shardan que sugiere una solución basada en la FORMAT(date_value, format_string)
función.
FORMAT()
es demasiado lento en relación conconvert(char(10),...)
Aquí hay algunos sql de prueba para todos los estilos.
DECLARE @now datetime
SET @now = GETDATE()
select convert(nvarchar(MAX), @now, 0) as output, 0 as style
union select convert(nvarchar(MAX), @now, 1), 1
union select convert(nvarchar(MAX), @now, 2), 2
union select convert(nvarchar(MAX), @now, 3), 3
union select convert(nvarchar(MAX), @now, 4), 4
union select convert(nvarchar(MAX), @now, 5), 5
union select convert(nvarchar(MAX), @now, 6), 6
union select convert(nvarchar(MAX), @now, 7), 7
union select convert(nvarchar(MAX), @now, 8), 8
union select convert(nvarchar(MAX), @now, 9), 9
union select convert(nvarchar(MAX), @now, 10), 10
union select convert(nvarchar(MAX), @now, 11), 11
union select convert(nvarchar(MAX), @now, 12), 12
union select convert(nvarchar(MAX), @now, 13), 13
union select convert(nvarchar(MAX), @now, 14), 14
--15 to 19 not valid
union select convert(nvarchar(MAX), @now, 20), 20
union select convert(nvarchar(MAX), @now, 21), 21
union select convert(nvarchar(MAX), @now, 22), 22
union select convert(nvarchar(MAX), @now, 23), 23
union select convert(nvarchar(MAX), @now, 24), 24
union select convert(nvarchar(MAX), @now, 25), 25
--26 to 99 not valid
union select convert(nvarchar(MAX), @now, 100), 100
union select convert(nvarchar(MAX), @now, 101), 101
union select convert(nvarchar(MAX), @now, 102), 102
union select convert(nvarchar(MAX), @now, 103), 103
union select convert(nvarchar(MAX), @now, 104), 104
union select convert(nvarchar(MAX), @now, 105), 105
union select convert(nvarchar(MAX), @now, 106), 106
union select convert(nvarchar(MAX), @now, 107), 107
union select convert(nvarchar(MAX), @now, 108), 108
union select convert(nvarchar(MAX), @now, 109), 109
union select convert(nvarchar(MAX), @now, 110), 110
union select convert(nvarchar(MAX), @now, 111), 111
union select convert(nvarchar(MAX), @now, 112), 112
union select convert(nvarchar(MAX), @now, 113), 113
union select convert(nvarchar(MAX), @now, 114), 114
union select convert(nvarchar(MAX), @now, 120), 120
union select convert(nvarchar(MAX), @now, 121), 121
--122 to 125 not valid
union select convert(nvarchar(MAX), @now, 126), 126
union select convert(nvarchar(MAX), @now, 127), 127
--128, 129 not valid
union select convert(nvarchar(MAX), @now, 130), 130
union select convert(nvarchar(MAX), @now, 131), 131
--132 not valid
order BY style
Aquí está el resultado.
output style
Apr 28 2014 9:31AM 0
04/28/14 1
14.04.28 2
28/04/14 3
28.04.14 4
28-04-14 5
28 Apr 14 6
Apr 28, 14 7
09:31:28 8
Apr 28 2014 9:31:28:580AM 9
04-28-14 10
14/04/28 11
140428 12
28 Apr 2014 09:31:28:580 13
09:31:28:580 14
2014-04-28 09:31:28 20
2014-04-28 09:31:28.580 21
04/28/14 9:31:28 AM 22
2014-04-28 23
09:31:28 24
2014-04-28 09:31:28.580 25
Apr 28 2014 9:31AM 100
04/28/2014 101
2014.04.28 102
28/04/2014 103
28.04.2014 104
28-04-2014 105
28 Apr 2014 106
Apr 28, 2014 107
09:31:28 108
Apr 28 2014 9:31:28:580AM 109
04-28-2014 110
2014/04/28 111
20140428 112
28 Apr 2014 09:31:28:580 113
09:31:28:580 114
2014-04-28 09:31:28 120
2014-04-28 09:31:28.580 121
2014-04-28T09:31:28.580 126
2014-04-28T09:31:28.580 127
28 جمادى الثانية 1435 9:31:28:580AM 130
28/06/1435 9:31:28:580AM 131
Haga nvarchar(max)
más corto para recortar el tiempo. Por ejemplo:
select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)
salidas:
May 18 2018
May 18 2018 9:57AM
dd-mm
o jun - 28
. ¿Hay alguna opción?
Intenta lo siguiente:
CONVERT(varchar(10), [MyDateTimecolumn], 20)
Para una fecha y hora completa y no solo la fecha:
CONVERT(varchar(23), [MyDateTimecolumn], 121)
Ver esta página para convertir estilos:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
O la
función CONVERT () de SQL Server
SQL Server 2012 tiene una nueva función, FORMATO: http://msdn.microsoft.com/en-us/library/ee634924.aspx
y puede usar cadenas de formato de fecha y hora personalizadas: http://msdn.microsoft.com/en-us/library/ee634398.aspx
Estas páginas implican que también está disponible en SQL2008R2, pero no tengo uno a mano para probar si ese es el caso.
Ejemplo de uso (fecha y hora australiana):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
Ya sea Cast
oConvert
:
Sintaxis para CAST
:
CAST ( expression AS data_type [ (length ) ])
Sintaxis para CONVERT
:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
http://msdn.microsoft.com/en-us/library/ms187928.aspx
En realidad, desde que solicitó un formato específico:
REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
Con Microsoft SQL Server:
Utilice la sintaxis para CONVERTIR:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Ejemplo:
SELECT CONVERT(varchar,d.dateValue,1-9)
Para el estilo, puede encontrar más información aquí: MSDN - Cast and Convert (Transact-SQL) .
Intenta lo siguiente:
CONVERT(VARCHAR(10),GetDate(),102)
Entonces necesitaría reemplazar el "." con "-".
Aquí hay un sitio que ayuda a http://www.mssqltips.com/tip.asp?tip=1145
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
He corregido la longitud de los datos, char(10)
ya que desea un formato de cadena específico.
Puede convertir su fecha en muchos formatos, la sintaxis es fácil de usar:
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
En su caso , acabo de convertir y restringir el tamaño por nvarchar (10) de esta manera:
CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15
Ver más en: http://www.w3schools.com/sql/func_convert.asp
Otra solución (si su fecha es Datetime) es un CAST simple :
CAST(MY_DATE_TIME as DATE) => 2016-09-15
Para SQL Server 2008+ Puede usar CONVERTIR y FORMAR juntos.
Por ejemplo, para la marca de tiempo de estilo europeo (por ejemplo, Alemania):
CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
No dijo qué base de datos, pero con mysql aquí hay una manera fácil de obtener una fecha de una marca de tiempo (y la conversión del tipo varchar debería ocurrir automáticamente):
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16 |
+-------------+
1 row in set (0.00 sec)
La forma más corta y simple es:
DECLARE @now AS DATETIME = GETDATE()
SELECT CONVERT(VARCHAR, @now, 23)
select REPLACE(CONVERT(VARCHAR, FORMAT(GETDATE(), N'dd/MM/yyyy hh:mm:ss tt')),'.', '/')
dará 05/05/2020 10:41:05 AM
como resultado
No dice qué idioma, pero supongo C#/.NET
que tiene un DateTime
tipo de datos nativo . En ese caso, simplemente conviértalo usando el ToString
método y use un especificador de formato como:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
Sin embargo, advertiría contra el uso de esto en una consulta de base de datos o concatenado en una declaración SQL. Las bases de datos requieren una cadena de formato específica para ser utilizada. Es mejor poner a cero la parte de tiempo y usar DateTime como parámetro SQL si eso es lo que está tratando de lograr.
CONVERT
, consulte la documentación de MSDN .