SQL Server(T-SQL)のcastとconvertの違い

http://10395.diarynote.jp/201110280123249459/
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/cast-and-convert-transact-sql

cast(123 as varchar)            -- '123'
cast(getdate() as varchar)      -- '02  8 2018 10:28AM'
convert(varchar,123)            -- '123'
convert(varchar,getdate(),111)  -- '2018/02/08'

基本的に型変換を行うために使うものだが、微妙に機能が異なっている。
(どちらも型変換「Convert.ToInt32(value)」を行うものであり、通常のプログラム言語のキャスト「(int)value」ではない)
convertはマジックナンバーを使ったりする分かりづらさがある。
castはdatetimeを文字列変換したときに書式を指定できないなど機能が少ない。
もともとSQLServer独自仕様として convert のみが存在したが、ANSI SQL に準拠するためにあとから cast が追加されたらしい。