it-swarm-pt.tech

Como converter DateTime para VarChar

Eu estou trabalhando em uma consulta no Sql Server 2005 onde eu preciso converter um valor na variável DateTime em uma variável varchar no formato yyyy-mm-dd (sem parte do tempo). Como faço isso?

271
Ali

Com o Microsoft Sql Server:

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

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

Aqui estão alguns testes SQL para todos os 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

Aqui está o 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

Torne nvarchar(max) menor para reduzir o tempo. Por exemplo:

select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)

saídas:

May 18 2018
May 18 2018  9:57AM
338
Colin

Tente o seguinte:

CONVERT(varchar(10), [MyDateTimecolumn], 20)

Para uma data completa e não apenas data, faça: 

CONVERT(varchar(23), [MyDateTimecolumn], 121)

Veja esta página para converter estilos:

http://msdn.Microsoft.com/pt-br/library/ms187928.aspx
OU
SQL Server CONVERT () função

179
Joel Coehoorn

O SQL Server 2012 tem uma nova função, FORMATO: http://msdn.Microsoft.com/pt-br/library/ee634924.aspx

e você pode usar strings de formato de data e hora personalizadas: http://msdn.Microsoft.com/en-us/library/ee634398.aspx

Estas páginas implicam que também está disponível no SQL2008R2, mas eu não tenho um prático para testar se for esse o caso.

Exemplo de uso (datetime australiano): 

FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
27
Zar Shardan

Cast ou Convert:

Sintaxe para CAST:

CAST ( expression AS data_type [ (length ) ])

Sintaxe para CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

http://msdn.Microsoft.com/pt-br/library/ms187928.aspx

Na verdade, desde que você pediu um formato específico:

REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
9
Per Hornshøj-Schierbeck

Você pode usar DATEPART(DATEPART, VARIABLE). Por exemplo:

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)
8
FCKOE

- Isso lhe dá o tempo como 0 no formato 'aaaa-mm-dd 00: 00: 00.000'


SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ; 
5
P's-SQL

Com o Microsoft SQL Server:

Use a sintaxe para CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Exemplo:

SELECT CONVERT(varchar,d.dateValue,1-9)

Para o estilo você pode encontrar mais informações aqui: MSDN - Cast e Convert (Transact-SQL) .

4
dmunozpa

Experimentar:

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

Mais em ms sql tips

2
Arek Bee

Tente o seguinte:

CONVERT(VARCHAR(10),GetDate(),102)

Então você precisaria substituir o "." com "-".

Aqui está um site que ajuda http://www.mssqltips.com/tip.asp?tip=1145

2
Amy Patterson
declare @dt datetime

set @dt = getdate()

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

Eu fixei o comprimento de dados de char(10) como você quer um formato de string específico.

2
Andy Jones

É assim que eu faço: CONVERT(NVARCHAR(10), DATE1, 103) )

1
IvanSnek

Você pode converter sua data em vários formatos, a sintaxe é simples de usar:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • O código é um inteiro, aqui 3 é a terceira formatação sem século, se você quiser que o século mude o código para 103.

No seu caso, acabei de converter e restringir tamanho por nvarchar (10) assim:

CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15

Veja mais em: http://www.w3schools.com/sql/func_convert.asp

Outra solução (se sua data é um datetime) é um simples CAST:

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

Experimente este SQL:

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

O OP mencionou datetime format. Para mim, a parte do tempo fica no caminho.
Acho que é um pouco mais limpo remover a parte do tempo (convertendo a data e a hora até a data) antes de formatar.

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

Para o SQL Server 2008+, você pode usar o CONVERT e o FORMAT juntos.

Por exemplo, para o registro de data e hora do estilo europeu (por exemplo, Alemanha):

CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
1
Peter Majko
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
0
Dilkhush

Você não disse qual banco de dados, mas com o mysql aqui é uma maneira fácil de obter uma data de um timestamp (e a conversão do tipo varchar deve acontecer automaticamente):

mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16  | 
+-------------+
1 row in set (0.00 sec)
0
Allan Wind

O caminho mais curto e mais simples é:

DECLARE @now AS DATETIME = GETDATE()

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