web-development-kb-es.site

Cómo convertir DateTime a VarChar

Estoy trabajando en una consulta en Sql Server 2005 donde necesito convertir un valor en la variable DateTime en una variable varchar en el formato yyyy-mm-dd (sin parte de tiempo). ¿Cómo puedo hacer eso?

281
Ali

Con Microsoft SQL Server:

--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'

--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
247
TonyOssa

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
355
Colin

Intente 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

182
Joel Coehoorn

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')
30
Zar Shardan

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), '.', '-')
9

Puedes 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)
9
FCKOE

- 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) ; 
6
P's-SQL

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) .

5
dmunozpa

Tratar:

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

Más en ms consejos sql

3
Arek Bee

Intente 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

3
Amy Patterson
declare @dt datetime

set @dt = getdate()

select convert(char(10),@dt,120) 

He corregido la longitud de los datos de char(10) como desea un formato de cadena específico.

3
Andy Jones

Así es como lo hago: CONVERT(NVARCHAR(10), DATE1, 103) )

2
IvanSnek

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 formato 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 un Datetime) es una simpleCAST:

CAST(MY_DATE_TIME as DATE) => 2016-09-15
2
Ema.H

Prueba este SQL:

select REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),'/','_') + '_'+ 
       REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),':','_')
2
Dilkhush

El OP menciona datetime format. Para mí, la parte del tiempo se interpone en el camino.
Creo que es un poco más limpio eliminar la parte del tiempo (mediante la conversión de datetime to date) antes de formatear.

convert( varchar(10), convert( date, @yourDate ) , 111 )
2
m42

Para SQL Server 2008+, puede usar CONVERTIR y FORMATEAR 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'))
2
Peter Majko
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
1
Dilkhush

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)
1
Allan Wind

La forma más corta y sencilla es:

DECLARE @now AS DATETIME = GETDATE()

SELECT CONVERT(VARCHAR, @now, 23)
1
Konstantin
CONVERT(VARCHAR, GETDATE(), 23)
0
Gabriel