Beim Studieren von SQL Server bin ich mir nicht sicher:
Ein datetime
-Feld mit dem Wert: 2012-02-26 09:34:00.000
Wenn ich aus der Tabelle auswähle mit:
CAST(dob2 AS VARCHAR(12) ) AS d1
Es formatiert es als: Feb 26 2012
Was ich nicht weiß, wie oder warum SQL Server DateTime so formatiert. Wenn Sie datetime2
verwenden, tut es nicht - weiß jemand warum?
Das Standard-Datumsformat hängt von der Spracheinstellung für den Datenbankserver ab. Sie können auch es pro Sitzung ändern wie:
set language french
select cast(getdate() as varchar(50))
-->
févr 8 2013 9:45AM
versuche dies:
select convert(varchar, dob2, 101)
select convert(varchar, dob2, 102)
select convert(varchar, dob2, 103)
select convert(varchar, dob2, 104)
select convert(varchar, dob2, 105)
select convert(varchar, dob2, 106)
select convert(varchar, dob2, 107)
select convert(varchar, dob2, 108)
select convert(varchar, dob2, 109)
select convert(varchar, dob2, 110)
select convert(varchar, dob2, 111)
select convert(varchar, dob2, 112)
select convert(varchar, dob2, 113)
verweise: http://msdn.Microsoft.com/en-us/library/ms187928.aspx
Kompatibilitätsunterstützung S sagt, dass Unter Kompatibilitätsstufe 110 ist der Standardstil für CAST and CONVERT
- Vorgänge für die Datentypen time
und datetime2
immer 121. Wenn Ihre Abfrage auf dem alten Verhalten basiert, verwenden Sie einen Kompatibilitätsgrad von weniger als 110 oder geben Sie den 0-Stil in der betroffenen Abfrage explizit an.
Das bedeutet standardmäßigdatetime2
istCAST as varchar
an121 format
. Für ex; col1
undcol2
Formate (unten) sind gleich (außer den 0 am Ende)
SELECT CONVERT(varchar, GETDATE(), 121) col1,
CAST(convert(datetime2,GETDATE()) as varchar) col2,
CAST(GETDATE() as varchar) col3
--Results
COL1 | COL2 | COL3
2013-02-08 09:53:56.223 | 2013-02-08 09:53:56.2230000 | Feb 8 2013 9:53AM
Zu Ihrer Information, wenn Sie CONVERT
anstelle von CAST
verwenden, können Sie einen dritten Parameter verwenden, um bestimmte Formate anzugeben, die hier unter MSDN aufgeführt sind.
In MS SQL Server können Sie Folgendes tun:
SET DATEFORMAT ymd
case when isdate(inputdate) = 1
then convert(datetime, cast(inputdate,datetime2), 103)
else
case when isdate(inputdate) = 0
then convert(datetime, cast(inputdate,datetime2), 103)
Dies ist mein Lieblingsgebrauch von 112 und 114 Select (convert (varchar, getdate (), 112) + replace (convert (varchar, getdate (), 114), ':', '')) als 'Getdate ( ) 112 + 114 oder YYYYMMDDHHMMSSMSS '
Ergebnis: Getdate () 112 + 114 oder YYYYMMDDHHMMSSMSS
20171016083349100