Zapytano mnie wczoraj czego lepiej używać do konwersji typów w T-SQL, albowiem do wyboru są dwie konstrukcje cast i Convert. Zanim podzielę się odpowiedzią, jakiej udzieliłem, przypomnę ich składnię:

CAST ( wyrażenie AS typ_danych [ ( długość_typu_danych ) ] )
CONVERT ( typ_danych [ ( długość_typu_danych) ] , wyrażenie [ , styl ] )

Osobiście preferuje drugą z konstrukcji tj. Convert, która jest funkcją, a zazwyczaj tak definiowana jest wszelkiego rodzaju konwersja – jest to funkcja, która dokonuje zamiany parametru wejściowego na rezultat o pożądanej postaci. O ile cast w jakimś stopniu przypomina funkcję, to jednak nią nie jest, bo zamiast parametrów występuje tam de facto konstrukcja konwertująca, czyli zażądanie konwersji w tym przypadku mogłoby po prostu wyglądać tak:

CAST wyrażenie AS typ_danych [ ( długość_typu_danych ) ]

co wydaje się zresztą bardziej spójne w zapisie.

Z powyższą argumentacją można oczywiście polemizować – bo niejako jest to kwestia gustu. Niemniej Convert ma jedną przewagę nad cast – to możliwość określenia stylu (formatu), w jakim przekazywane jest konwertowane wyrażenie lub w jakim ma być ono zwrócone. Styl przydaje się dla konwersji:

  • czasu i daty
  • typów rzeczywistych i walutowych
  • xml-a
  • binariów i tekstów

Nie ma sensu przedstawiać tutaj wszystkich możliwych stylów, można je znaleźć na właściwej stronie dokumentacji T-SQL. Należy natomiast wspomnieć, że styl jest wartością całkowitą (czyli podajemy konkretną – „magiczną” – liczbę).