Estoy trabajando en una consulta en Sql Server 2005 donde necesito convertir un valor en la variable DateTime
en una variable varchar
en formato yyyy-mm-dd
(sin parte de tiempo). ¿Cómo puedo hacer eso?Cómo convertir DateTime a VarChar
Respuesta
con Microsoft SQL Server:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
Pruebe lo siguiente:
CONVERT(varchar(10), [MyDateTimecolumn], 20)
Durante un tiempo, fecha completa y no sólo la fecha do:
CONVERT(varchar(23), [MyDateTimecolumn], 121)
Ver esta página para estilos convertir:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
O
SQL Server CONVERT() Function
CONVERT
, vea MSDN documentation.
De cualquier Cast
o Convert
:
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, ya que solicitó un formato específico:
REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
Usted no ha dicho qué base de datos, pero con MySQL aquí es una manera fácil de obtener una fecha a partir de una marca de tiempo (y la conversión de tipo varchar debería ocurrir automáticamente):
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16 |
+-------------+
1 row in set (0.00 sec)
comprobar otra vez: se especifica el servidor SQL a través de una etiqueta. –
Pruebe lo siguiente:
CONVERT(VARCHAR(10),GetDate(),102)
Entonces se necesitaría para reemplazar el "" con "-".
Aquí es un sitio que ayuda a http://www.mssqltips.com/tip.asp?tip=1145
Usted no dice qué idioma pero estoy asumiendo C#/.NET
porque tiene un tipo de datos nativa DateTime
. En ese caso, simplemente convertirlo usando el método ToString
y utilizar un especificador de formato tales como:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
Sin embargo, no sería recomendable el uso de esta en una consulta de base de datos o concatenan en una instrucción SQL. Las bases de datos requieren una cadena de formato específica para ser utilizada. Es mejor que ponga a cero la parte de tiempo y use DateTime como parámetro de SQL si eso es lo que está intentando lograr.
En la pregunta, es mencionado "Estoy trabajando en una consulta en SQL Server 2005". – InkHeart
@InkHeart y todos los votantes abajo - Esta respuesta fue publicada en 2008. Si marca la historia de las ediciones de la pregunta original no había etiquetas y/o cualquier otra información relacionada con la tecnología incluida. – GSazheniuk
tenga en cuenta que YYYY-MM-DD es ambiguo, según la configuración de idioma.mejor manera de utilizar la norma ISO estándar AAAAMMDD, ver longitud de datos this blog post
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
He fijo de char(10)
como desea un formato de cadena específica.
- Esto le da el tiempo como 0 en formato 'aaaa-mm-dd 00: 00: 00.000'
SELECT CAST(CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ;
El OP mencionó datetime formato. Para mí, la parte del tiempo se interpone en el camino.
Creo que es un poco más limpio eliminar la porción de tiempo (fundiendo fecha y hora hasta la fecha) antes de formatear.
convert(varchar(10), convert(date, @yourDate) , 111)
Con Microsoft SQL Server:
Uso Sintaxis para convertir:
CONVERT (data_type [ (length) ] , expression [ , style ])
Ejemplo:
SELECT CONVERT(varchar,d.dateValue,1-9)
Para el estilo se puede encontrar más información aquí: MSDN - Cast and Convert (Transact-SQL).
Puede usar DATEPART(DATEPART, VARIABLE)
. Por ejemplo:
DECLARE @DAY INT
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @DATE DATETIME
@DATE = GETDATE()
SELECT @DAY = DATEPART(DAY,@DATE)
SELECT @MONTH = DATEPART(MONTH,@DATE)
SELECT @YEAR = DATEPART(YEAR,@DATE)
Así es como lo hago: CONVERT(NVARCHAR(10), DATE1, 103))
SQL Server 2012 tiene una nueva función, FORMATO: http://msdn.microsoft.com/en-us/library/ee634924.aspx
y se pueden utilizar personalizados cadenas de formato de fecha y hora: http://msdn.microsoft.com/en-us/library/ee634398.aspx
Estas páginas implican que también está disponible en SQL2008R2, pero no tengo una a mano para probar si ese es el caso.
Ejemplo de uso (fecha y hora de Australia):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
He aquí algunos sql prueba para todos los estilos. Haga nvarchar(max)
más corto para recortar (por ejemplo, nvarchar(10)
).
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
Aquí algunas veces queremos como 'dd-mm' o' jun - 28'. Hay alguna opción? – JiLaBaJi
Funciona para SQL Server 2005, así que esto es ideal para aquellos de nosotros que todavía estamos entrometiéndonos en sistemas antiguos. Actualizando a 2014 pronto, ¡emocionado! – dyslexicanaboko
Quiero formatear cerca de 101 - 101 = 04/28/2014, quiero sin cero en el mes, salida 28/04/2014, ¿es aplicable? –
la más corta y la forma más sencilla es:
DECLARE @now AS DATETIME = GETDATE()
SELECT CONVERT(VARCHAR, @now, 23)
, pero puede cambiar la fecha en muchos formatos, la syntaxe es fácil de usar :
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' *)
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
- El código es un número entero, aquí 3 es la tercera formateo sin siglo, si desea que el siglo que acaba de cambiar el código a 103.
En su caso, sólo he convertido y restringir 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
Un otra solución (si la fecha es una fecha y hora) es un simple REPARTO:
CAST(MY_DATE_TIME as DATE) => 2016-09-15
probar este SQL:
select REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),'/','_') + '_'+
REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),':','_')
- 1. cómo convertir el hexadecimal a varchar (datetime)?
- 2. SQL Server Convertir Varchar a Datetime
- 3. Cómo convertir varchar a datetime en T-SQL?
- 4. Convertir varchar en datetime en SQL Server
- 5. Cómo convertir DateTime? a DateTime
- 6. SQL convertir INT a datetime
- 7. Cómo convertir sqldatetime.minvalue a datetime?
- 8. ¿Cómo hacer conversiones de varchar a datetime deterministic?
- 9. Convertir DateTime a String PHP
- 10. Convertir Matlab Datenum a Datetime
- 11. Cómo convertir datetime a string en linqtosql?
- 12. cómo convertir datetime a short date?
- 13. Cómo convertir DateTime a hora del este
- 14. Cómo convertir Joda Localdate a Joda DateTime?
- 15. perl cómo convertir una cadena a Datetime?
- 16. Cómo convertir DateTime de JSON a C#?
- 17. Cómo convertir `ctime` a` datetime` en Python?
- 18. Convertir el valor numérico a Varchar
- 19. MySQL: Convertir INT a DATETIME
- 20. Convertir varchar a UNIQUEIDENTIFIER en SQL Server
- 21. mySQL convertir varchar a la fecha
- 22. Cuándo utilizar VARCHAR y FECHA/DATETIME
- 23. Cómo convertir de varbinary a char/varchar en mysql
- 24. Cómo convertir Varchar a Int en sql server 2008?
- 25. Convertir UTC DateTime a otra zona horaria
- 26. convertir hora utc y desplazamiento a DateTime
- 27. Convertir dateTime a unix epoch en xslt
- 28. MySQL convertir datetime a Unix timestamp
- 29. LINQ convertir DateTime a la cadena
- 30. Convertir .NET Ticks a SQL Server DateTime
Para aquellos de ustedes que puedan estar interesados, esto funcionaría mejor si cambia VARCHAR a CHAR. Ver este post (http://stackoverflow.com/questions/59667/why-would-i-ever-pick-char-over-varchar-in-sql) para más detalles. Esencialmente, hay 2 bytes de sobrecarga involucrados en VARCHAR vs CHAR. En este escenario, sabemos que su cadena siempre tendrá 10 caracteres, por lo que CHAR es apropiado. –
Nota al margen, por lo que he visto, es una lástima que ninguno de los formatos respete el DATEFORMAT, quizás haya otra manera. –
¿Hay alguna razón para usar 'LEFT (.., 10)' en lugar de 'CONVERT (CHAR (10), ...)'? También aquellos que trabajan con las versiones más nuevas de SQL Server que en 2005 (!) Deben verificar [la respuesta de Zar Shardan] (http://stackoverflow.com/a/17713768/1026) sugiriendo una solución basada en 'FORMAT (date_value, format_string) 'función. – Nickolay