it-swarm.it

Come convertire DateTime in VarChar

Sto lavorando su una query in SQL Server 2005 in cui ho bisogno di convertire un valore in variabile DateTime in una variabile varchar nel formato yyyy-mm-dd (senza parte temporale). Come lo faccio?

271
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)
241
TonyOssa

Ecco alcuni test sql per tutti gli stili.

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

Ecco il risultato

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

Rendi nvarchar(max) più breve per ridurre il tempo. Per esempio:

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

uscite:

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

Prova quanto segue:

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

Per una data completa e non solo per la data: 

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

Vedi questa pagina per convertire gli stili:

http://msdn.Microsoft.com/en-us/library/ms187928.aspx
O
Funzione SQL Server CONVERT ()

179
Joel Coehoorn

SQL Server 2012 ha una nuova funzione, FORMAT: http://msdn.Microsoft.com/en-us/library/ee634924.aspx

ed è possibile utilizzare stringhe di formato di data e ora personalizzate: http://msdn.Microsoft.com/en-us/library/ee634398.aspx

Queste pagine implicano che è disponibile anche su SQL2008R2, ma non ne ho uno a portata di mano per verificare se questo è il caso.

Esempio di utilizzo (datetime australiano): 

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

O Cast o Convert:

Sintassi per CAST:

CAST ( expression AS data_type [ (length ) ])

Sintassi per CONVERT:

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

http://msdn.Microsoft.com/en-us/library/ms187928.aspx

In realtà da quando hai chiesto un formato specifico:

REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')

Puoi usare DATEPART(DATEPART, VARIABLE). Per esempio:

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

- Questo ti dà il tempo come 0 nel formato 'aaaa-mm-gg 00: 00: 00.000'


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

Con Microsoft SQL Server:

Usa sintassi per CONVERT:

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

Esempio:

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

Per lo stile puoi trovare maggiori informazioni qui: MSDN - Cast e Converti (Transact-SQL) .

4
dmunozpa

Provare:

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

Maggiori informazioni su ms sql tips

2
Arek Bee

Prova quanto segue:

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

Quindi dovrai sostituire "." con "-".

Ecco un sito che helps http://www.mssqltips.com/tip.asp?tip=1145

2
Amy Patterson
declare @dt datetime

set @dt = getdate()

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

Ho fissato la lunghezza dei dati di char(10) come vuoi un formato di stringa specifico.

2
Andy Jones

Ecco come lo faccio: CONVERT(NVARCHAR(10), DATE1, 103) )

1
IvanSnek

Puoi convertire la tua data in molti formati, la sintassi è semplice da usare:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • Il codice è un numero intero, qui 3 è il terzo formato senza secolo, se vuoi che il secolo cambi il codice in 103.

Nel tuo caso, ho appena convertito e limitato le dimensioni da nvarchar (10) in questo modo:

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

Vedi di più su: http://www.w3schools.com/sql/func_convert.asp

Un'altra soluzione (se la tua data è un Datetime) è un semplice CAST:

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

Prova questo SQL:

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

L'OP ha menzionato data/ora formato. Per me, la parte del tempo si intromette.
Penso che sia un po 'più pulito rimuovere la porzione del tempo (eseguendo il cast datetime alla data) prima della formattazione.

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

Per SQL Server 2008+ è possibile utilizzare CONVERT e FORMAT insieme.

Ad esempio, per timestamp di stile europeo (ad esempio Germania):

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

Non hai detto quale database, ma con mysql qui è un modo semplice per ottenere una data da un timestamp (e la conversione del tipo varchar dovrebbe avvenire automaticamente):

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

Il modo più breve e più semplice è:

DECLARE @now AS DATETIME = GETDATE()

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