Runden auf Komponenten eines DATETIME

Es kommt manchmal vor, dass man in T-SQL einen DateTime-Wert auf eine bestimmte Komponente runden muss. Beispielsweise möchte mann die Minuten und Sekunden abschneiden, die Stunde aber behalten. Dies kann man mit folgendem Statement erreichen:

SELECT DATEADD(hh, DATEDIFF(hh, '20000101', getdate()), '20000101')

Das macht aus 2012-01-01 13:59:59 den gewünschten Wert 2012-01-01 13:00:00. Das Vergleichsdatum 20000101 ist beliebig gewählt. Es kann jedes Datum sein, welches vor dem Datum, das bearbeitet wird, liegt.

Zeilen in kommaseparierte Strings umwandeln

Manchmal möchte man die Ergebnisse einer Abfrage nicht als separate Datensätze, sondern in Form eines kommaseparierten Strings zurückliefern.

Beispiel:

Das SELECT liefert:
Hello
World
It's
Me

Aber man möchte als Ergebnis des Aufrufs:
Hello, World, It's, Me

Anstatt nun mit einem Cursor die Ergebnisse hintereinanderzuhängen, kann man dies auch relativ elegant folgendermaßen lösen:

Das AND Field IS NOT NULL am Ende der WHERE-Bedingung ist wichtig, denn ansonsten wäre das Ergebnis immer null, sobald einer der Werte null ist (denn etwas + NULL = NULL).

Ergebnisse einer T-SQL Abfrage seitenweise liefern

In MySQL kann man LIMIT verwenden, um Ergebnisse seitenweise zu erhalten. So etwas gibt es in T-SQL nicht, aber mit wenig Aufwand kann man dasselbe Ergebnis erhalten:

Dies liefert 15 Einträge ab Eintrag 45 in der Tabelle tCustomer. Zu beachten ist, dass die „Seitennummer“ nullbasiert angegeben werden muss. Daher wird auch ROW_NUMBER() OVER (ORDER BY LastName, FirstName)) – 1 verwendet.