web-dev-qa-db-de.com

Wie konvertiert man DateTime in VarChar?

Ich arbeite an einer Abfrage in SQL Server 2005, bei der ich einen Wert in Variable DateTime in eine Variable varchar im Format yyyy-mm-dd (ohne Zeitteil) konvertieren muss. Wie mache ich das?

271
Ali

Mit 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

Hier ist ein Test-SQL für alle Stile.

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

Hier ist das Ergebnis

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

nvarchar(max) kürzer machen, um die Zeit zu verkürzen. Zum Beispiel:

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

ausgänge:

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

Versuche Folgendes:

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

Für eine vollständige Datumszeit und nicht nur für ein Datum gilt Folgendes: 

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

Siehe diese Seite für Konvertierungsstile:

http://msdn.Microsoft.com/de-de/library/ms187928.aspx
ODER
SQL Server CONVERT () - Funktion

179
Joel Coehoorn

SQL Server 2012 verfügt über die neue Funktion FORMAT: http://msdn.Microsoft.com/en-us/library/ee634924.aspx

und Sie können benutzerdefinierte Datumsformat-Zeichenfolgen verwenden: http://msdn.Microsoft.com/en-us/library/ee634398.aspx

Diese Seiten implizieren, dass es auch auf SQL2008R2 verfügbar ist, aber ich habe kein praktisches Tool, um zu testen, ob dies der Fall ist.

Verwendungsbeispiel (australische Datetime): 

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

Entweder Cast oder Convert:

Syntax für CAST:

CAST ( expression AS data_type [ (length ) ])

Syntax für CONVERT:

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

http://msdn.Microsoft.com/de-de/library/ms187928.aspx

Eigentlich, da Sie nach einem bestimmten Format gefragt haben:

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

Sie können DATEPART(DATEPART, VARIABLE) verwenden. Zum Beispiel:

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

- Dies gibt Ihnen die Zeit als 0 im Format 'JJJJ-MM-TT 00: 00: 00.000'.


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

Mit Microsoft SQL Server:

Syntax für CONVERT verwenden:

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

Beispiel:

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

Weitere Informationen zum Stil finden Sie hier: MSDN - Cast and Convert (Transact-SQL) .

4
dmunozpa

Versuchen:

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

Mehr zu ms sql tipps

2
Arek Bee

Versuche Folgendes:

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

Dann müssten Sie das "." mit "-".

Hier ist eine Website, die hilft http://www.mssqltips.com/tip.asp?tip=1145

2
Amy Patterson
declare @dt datetime

set @dt = getdate()

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

Ich habe eine feste Datenlänge von char(10), da Sie ein bestimmtes String-Format wünschen.

2
Andy Jones

So mache ich es: CONVERT(NVARCHAR(10), DATE1, 103) )

1
IvanSnek

Sie können Ihr Datum in vielen Formaten konvertieren, die Syntax ist einfach zu verwenden:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • Der Code ist eine ganze Zahl, hier ist 3 die dritte Formation ohne Jahrhundert. Wenn Sie das Jahrhundert haben möchten, ändern Sie den Code einfach in 103.

In Ihrem Fall habe ich gerade die Größe von nvarchar (10) wie folgt konvertiert und begrenzt:

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

Weitere Informationen finden Sie unter: http://www.w3schools.com/sql/func_convert.asp

Eine andere Lösung (wenn Ihr Datum eine Datetime ist) ist eine einfache CAST:

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

Versuchen Sie diese SQL:

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

Das erwähnte OP-Format datetime . Für mich steht der Zeitteil im Weg.
Ich denke, es ist ein bisschen sauberer, den Zeitanteil (durch das Datums-Datum bis zum Datum) vor dem Formatieren zu entfernen.

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

Für SQL Server 2008+ können Sie CONVERT und FORMAT zusammen verwenden.

Zum Beispiel für Zeitstempel im europäischen Stil (z. B. Deutschland):

CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
1
Peter Majko

Schreiben Sie eine Funktion

CREATE FUNCTION dbo.TO_SAP_DATETIME(@input datetime)
RETURNS VARCHAR(14)
AS BEGIN
    DECLARE @ret VARCHAR(14)
    SET @ret = COALESCE(SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(26), @input, 25),'-',''),' ',''),':',''),1,14),'00000000000000');
    RETURN @ret
END
0
Beyhan
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
0
Dilkhush

Sie haben nicht gesagt, welche Datenbank, aber mit mysql ist dies ein einfacher Weg, um ein Datum aus einem Zeitstempel zu erhalten (und die Konvertierung vom Typ varchar sollte automatisch erfolgen):

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

Der kürzeste und einfachste Weg ist:

DECLARE @now AS DATETIME = GETDATE()

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