Sto lavorando a una query in SQL Server 2005 in cui ho bisogno di convertire un valore in DateTime
variabile in una varchar
variabile in yyyy-mm-dd
formato (senza time part). Come lo faccio?
Sto lavorando a una query in SQL Server 2005 in cui ho bisogno di convertire un valore in DateTime
variabile in una varchar
variabile in yyyy-mm-dd
formato (senza time part). Come lo faccio?
Risposte:
Con Microsoft SQL Server:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
LEFT(.., 10)
invece di CONVERT(CHAR(10), ...)
? Anche quelli che lavorano con le versioni più recenti di SQL Server rispetto al 2005 (!) Dovrebbero dare un'occhiata alla risposta di Zar Shardan che suggerisce una soluzione basata sulla FORMAT(date_value, format_string)
funzione.
FORMAT()
è troppo lento rispetto aconvert(char(10),...)
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
Rendere nvarchar(max)
più breve per tagliare 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
dd-mm
o jun - 28
. C'è qualche opzione ??
Prova quanto segue:
CONVERT(varchar(10), [MyDateTimecolumn], 20)
Per una data completa e non solo la data fai:
CONVERT(varchar(23), [MyDateTimecolumn], 121)
Vedi questa pagina per gli stili di conversione:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
O
CONVERT SQL Server () Funzione
SQL Server 2012 ha una nuova funzione, FORMATO: http://msdn.microsoft.com/en-us/library/ee634924.aspx
e puoi 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 utile per verificare se è così.
Esempio di utilizzo (datetime australiano):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
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), '.', '-')
Con Microsoft SQL Server:
Usa la 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 and Convert (Transact-SQL) .
Provare:
select replace(convert(varchar, getdate(), 111),'/','-');
Maggiori informazioni sui suggerimenti di ms sql
Prova quanto segue:
CONVERT(VARCHAR(10),GetDate(),102)
Quindi dovrai sostituire il "." con "-".
Ecco un sito che aiuta http://www.mssqltips.com/tip.asp?tip=1145
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
Ho fissato la lunghezza dei dati char(10)
come desideri un formato stringa specifico.
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
Nel tuo caso , ho appena convertito e limitato le dimensioni di nvarchar (10) in questo modo:
CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15
Scopri 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
Per SQL Server 2008+ È possibile utilizzare CONVERT e FORMAT insieme.
Ad esempio, per il timestamp in stile europeo (es. Germania):
CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
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)
Il modo più breve e più semplice è:
DECLARE @now AS DATETIME = GETDATE()
SELECT CONVERT(VARCHAR, @now, 23)
select REPLACE(CONVERT(VARCHAR, FORMAT(GETDATE(), N'dd/MM/yyyy hh:mm:ss tt')),'.', '/')
darà 05/05/2020 10:41:05 AM
di conseguenza
Non dici quale lingua, ma presumo C#/.NET
perché ha un DateTime
tipo di dati nativo . In tal caso, convertilo semplicemente usando il ToString
metodo e usa un identificatore di formato come:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
Tuttavia, vorrei evitare di utilizzare questo in una query del database o concatenato in un'istruzione SQL. I database richiedono l'utilizzo di una stringa di formattazione specifica. È meglio azzerare la parte temporale e utilizzare DateTime come parametro SQL se è quello che stai cercando di ottenere.
CONVERT
, consultare la documentazione MSDN .