Są konwersji dwie wersje, którą robić konwersję?
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ę).