ti-enxame.com

Como converter um datetime para string em T-SQL

Estou surpreso de não conseguir encontrar essa questão aqui já.

Eu tenho um date time var e quero convertê-lo em uma string para que eu possa anexá-lo a outra string. Eu quero em um formato que pode ser convertido facilmente de volta para uma data.

Como posso fazer isso?

(Eu quero a parte da data e a parte do tempo.)

78
cja

A consulta a seguir obterá o datetime atual e será convertida em string. com o seguinte formato 
yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 
126
John Woo

Existem muitas maneiras diferentes para convert a datetime em uma string. Aqui está um jeito:

SELECT convert(varchar(25), getdate(), 121)  – yyyy-mm-dd hh:mm:ss.mmm

Veja Demo

Aqui está um site que tem uma lista de todas as conversões:

Como formatar datetime e data no SQL Server

26
Taryn

Você pode usar a instrução convert no Microsoft SQL Server para converter uma data em uma string. Um exemplo da sintaxe usada seria:

SELECT convert(varchar(20), getdate(), 120)

O texto acima retornaria a data e a hora atuais em uma string com o formato YYYY-MM-DD HH:MM:SS no formato de 24 horas.

Você pode alterar o número no final da instrução para um dos muitos que alterarão o formato das cadeias retornadas. Uma lista desses códigos pode ser encontrada no MSDN na seção CAST e CONVERT reference.

7
Jeremy1026

Existem 3 métodos diferentes dependendo de qual é minha exigência e qual versão estou usando.

Aqui estão os métodos.

1) usando o Convert

DECLARE @DateTime DATETIME = GETDATE();
--Using Convert
SELECT
    CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime'
    ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate'
    ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'

2) Usando o Cast (SQL Server 2008 e além)

SELECT
    CAST(@DateTime AS DATETIME2) AS 'myDateTime'
    ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
    ,CAST(@DateTime AS DATE) AS 'myDate'
    ,CAST(@DateTime AS TIME) AS 'myTime'
    ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'

3) Usando o tipo de dados de caracteres de comprimento fixo

DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120);
DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120);

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'
5
Todd.J.Hayden

Além das funções CAST e CONVERT nas respostas anteriores, se você estiver usando o SQL Server 2012 e acima, use a função FORMAT para converter um tipo baseado em DATETIME em uma string.

Para converter de volta, use as funções opcionais PARSE ou TRYPARSE.

Os estilos de formatação são baseados em .NET (semelhante às opções de formatação de string do método ToString ()) e têm a vantagem de serem conscientes da cultura. por exemplo.

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')

Resultados:

2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000
3
g2server

Verifique a sintaxe CAST e CONVERT do t-sql:

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

1
Antonio Papa

Isso foi respondido por muitas pessoas, mas eu sinto que a solução mais simples foi deixada de fora.

SQL SERVER (eu acredito que seu 2012 +) tem equivalentes de seqüência implícita para DATETIME2 como mostrado aqui

Observe a seção "Formatos literais de string suportados para datetime2"

Para responder a pergunta do OP explicitamente:

DECLARE @myVar NCHAR(32)
DECLARE @myDt DATETIME2
SELECT @myVar = @GETDATE()
SELECT @myDt = @myVar
PRINT(@myVar)
PRINT(@myDt)

saída:

Jan 23 2019 12:24PM             
2019-01-23 12:24:00.0000000

Nota: A primeira variável (myVar) está realmente mantendo o valor '2019-01-23 12:24:00.0000000' também. Ele só é formatado para Jan 23 2019 12:24PM devido ao conjunto de formatação padrão para o SQL SERVER que é chamado quando você usa PRINT. Não se deixe enganar por aqui, a string real em (myVer) = '2019-01-23 12:24:00.0000000'

1
Jamie Marshall

Tente abaixo:

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
0
Gaurav123
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101 - EUA - MM/DD/AAAA

108 - Hora - HH: MI: SS

112 - Data - AAAAMMDD

121 - ODBC - AAAA-MM-DD HH: MI: SS.FFF

20 - ODBC - AAAA-MM-DD HH: MI: SS

0
Rajsanthosh Sreenivasan