Frage

ich auf einer Abfrage in SQL Server 2005 arbeite, wo ich einen Wert in DateTime Variable in eine varchar Variable in yyyy-mm-dd Format (ohne Zeit Teil) zu konvertieren. Wie kann ich das tun?

War es hilfreich?

Lösung

Mit Microsoft SQL Server:

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

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

Andere Tipps

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

Machen Sie nvarchar(max) kürzer die Zeit zu trimmen. 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

Versuchen Sie Folgendes:

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

Für eine vollständige Datum Zeit und nicht nur Datum tun:

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

Sehen Sie diese Seite für convert Stile:

http://msdn.microsoft.com/en-us/library/ ms187928.aspx
OR
SQL Server CONVERT () Funktion

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

und Sie können benutzerdefinierten Datum Zeitformatstrings verwenden: http://msdn.microsoft.com/en -US / library / ee634398.aspx

Diese Seiten implizieren es auf SQL2008R2 auch verfügbar ist, aber ich habe nicht eine praktisch zu testen, ob das der Fall ist.

Beispiel für die Verwendung (Australian Datetime):

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

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/en-us/library/ ms187928.aspx

Eigentlich, da Sie für ein bestimmtes Format gefragt:

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)

- Das gibt Ihnen die Zeit als 0 im Format yyyy-mm-dd 00: 00: 00.000 "


SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ; 

Mit Microsoft SQL Server:

Verwenden Sie Syntax für CONVERT:

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

Beispiel:

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

Für den Stil können Sie weitere Informationen finden Sie hier: MSDN - Cast und Convert ( Transact-SQL) .

Versuchen:

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

Mehr MS SQL Tipps

Versuchen Sie Folgendes:

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

Dann müßten Sie die ersetzen „“ mit "-".

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

declare @dt datetime

set @dt = getdate()

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

Ich habe Datenlänge von char(10) fixiert, wie Sie eine bestimmte Zeichenfolge Format möchten.

Die OP erwähnt Datetime Format. Für mich wird die Zeit, an der Art und Weise.
Ich denke, es ist ein bisschen sauberen den Zeitanteil zu entfernen (durch Datetime Datum Gießen) vor der Formatierung.

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

Dies ist, wie ich es tun: CONVERT(NVARCHAR(10), DATE1, 103) )

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

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • Der Code ist eine ganze Zahl, hier 3 die dritte Formating ohne Jahrhundert ist, wenn man das Jahrhundert will nur den Code auf 103 ändern.

In Ihrem Fall , habe ich nur umgewandelt und beschränken Größe von nvarchar (10) wie folgt aus:

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

Mehr unter: http://www.w3schools.com/sql/func_convert.asp

Eine andere Lösung (wenn Ihr Datum ein Datetime ist) ist ein einfaches CAST :

CAST(MY_DATE_TIME as DATE) => 2016-09-15

Versuchen Sie, diese SQL:

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

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

Zum Beispiel für europäische Art (zum Beispiel Deutschland) Zeitstempel:

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

Sie nicht gesagt, welche Datenbank, aber mit mysql hier ist eine einfache Möglichkeit, ein Datum aus einem Zeitstempel zu erhalten (und die varchar Typumwandlung sollte automatisch geschehen):

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

Die kürzeste und einfachste Weg ist:

DECLARE @now AS DATETIME = GETDATE()

SELECT CONVERT(VARCHAR, @now, 23)
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
CONVERT(VARCHAR, GETDATE(), 23)

Sie sagen nicht, welche Sprache, aber ich C#/.NET gehe davon aus, weil es eine native DateTime Datentyp hat. In diesem Fall nur wandelt sie die ToString Methode und einen Formatbezeichner verwenden wie:

DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");

Allerdings würde ich gegen die Verwendung dieser Abfrage in einer Datenbank Verwarnung oder in eine SQL-Anweisung verkettet. Datenbanken benötigt eine bestimmte Formatierungszeichenfolge verwendet werden. Sie sind besser dran, die Zeit Teil eliminiert und mit dem Datetime als SQL-Parameter, wenn das ist, was Sie versuchen zu erreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top