sql - query - Cómo convertir DateTime a VarChar
sql convert time to varchar (19)
- Esto le da el tiempo como 0 en el formato ''aaaa-mm-dd 00: 00: 00.000''
SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ;
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 la parte de tiempo). ¿Cómo puedo hacer eso?
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
Así es como lo hago: CONVERT(NVARCHAR(10), DATE1, 103) )
Con Microsoft SQL Server:
Use 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 - Conversión y conversión (Transact-SQL) .
Con Microsoft SQL Server:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = ''2008-05-03''
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
El OP menciona el formato de fecha y hora . Para mí, la parte del tiempo se interpone en el camino.
Creo que es un poco más limpio eliminar la parte del tiempo (lanzando datetime hasta la fecha) antes de formatear.
convert( varchar(10), convert( date, @yourDate ) , 111 )
Intenta lo siguiente:
CONVERT(VARCHAR(10),GetDate(),102)
Entonces necesitarías reemplazar el "." con "-".
Aquí hay un sitio que ayuda a http://www.mssqltips.com/tip.asp?tip=1145
Intenta lo siguiente:
CONVERT(varchar(10), [MyDateTimecolumn], 20)
Para una fecha completa y no solo para la fecha, haga:
CONVERT(varchar(23), [MyDateTimecolumn], 121)
Vea esta página para los estilos de conversión:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
O
SQL Server CONVERT () Función
La forma más corta y sencilla es:
DECLARE @now AS DATETIME = GETDATE()
SELECT CONVERT(VARCHAR, @now, 23)
No dice qué idioma, pero asumo que C#/.NET
porque tiene un tipo de datos DateTime
nativo. En ese caso, simplemente ToString
utilizando el método ToString
y use un especificador de formato como:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
Sin embargo, le advierto que no utilice 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 que ponga a cero la parte del tiempo y utilice el DateTime como un parámetro SQL si eso es lo que está tratando de lograr.
No dijo qué base de datos, pero con mysql aquí es una manera fácil de obtener una fecha 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)
Prueba este SQL:
select REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),''/'',''_'') + ''_''+
REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),'':'',''_'')
Puede utilizar 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)
Puedes convertir tu 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
- El código es un entero, aquí 3 es el tercer formateo sin siglo, si desea que el siglo cambie el código a 103.
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 simple CAST :
CAST(MY_DATE_TIME as DATE) => 2016-09-15
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 una útil para probar si ese es el caso.
Ejemplo de uso (datetime australiano):
FORMAT(VALUE,''dd/MM/yyyy h:mm:ss tt'')
Ya sea 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 pediste un formato específico:
REPLACE(CONVERT(varchar(10), Date, 102), ''.'', ''-'')
CONVERT(VARCHAR, GETDATE(), 23)
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
He fijado la longitud de datos de char(10)
como desea un formato de cadena específico.