Performantester Weg zur Konvertierung von DateTime Int-Format
Brauche ich zum konvertieren von Datetime-Felder in eine speziell formatierte Typ INT. Zum Beispiel, ich möchte
2000-01-01 00:00:00.000
zu konvertieren 20010101
.
Was ist die performante Art und Weise zu machen, dass die Umstellung für den Vergleich in einer Abfrage?
Etwas wie:
DATEPART(year, orderdate) * 10000 + DATEPART(month, orderdate) * 100 +
DATEPART(day, orderdate)
oder
cast(convert(char(8), orderdate, 112) as int)
Was ist die performante Art und Weise, dies zu tun?
- Einfache Antwort: testen Sie beide und sehen, welche ist "besser" (z.B. schneller, verwendet weniger CPU, weniger liest/schreibt, etc.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrem Beispiel zu
cast(convert(char(8), orderdate, 112) as int)
scheint gut zu mir. Es bekommt schnell das Datum nach unten, um das von Ihnen benötigte format konvertiert und eine int.Aus einem Ausführungsplan Standpunkt aus, scheint es keinen Unterschied zwischen den beiden.
Können Sie versuchen, mit TSQL-builtin-Funktionen.
Das ist es nicht .NETTO-tick kompatibel, aber es ist immer noch SCHNELL sortierbar und können Sie wählen Ihre GRANULARITÄT auf Nachfrage:
Ist es das, was Sie brauchen,
cast(convert(char(8), orderdate, 112) as int)
, die genauso gut funktionieren. Ihr Beispiel nicht sogar die Konvertierung in einen INT-Rechnung.Wenn Sie pass '2010-01-01 00:00:00.000' direkt in Ihrem code die SELECT-Anweisung sieht es als string und nicht einen datetime-Datentyp. Es ist nicht die gleiche wie die Wahl eines datetime-Feld direkt.
Gibt es keine Notwendigkeit zu tun, äußeren CAST, da SQL Server eine implizite Konvertierung, hier ist der Beweis.
SELECT CONVERT(INT, CAST ('2013-08-05 09:23:30' as DATETIME))
kommt von hier die Konvertierung ist implizite