Yanıtlar:
CONVERT
SQL Server'a özgüdür, CAST
ANSI'dir.
CONVERT
tarihleri vb. biçimlendirebileceğinizden daha esnektir. Bunun dışında bunlar hemen hemen aynıdır. Genişletilmiş özelliklerle ilgilenmiyorsanız,CAST
.
DÜZENLE:
Aşağıdaki yorumlarda @beruic ve @CF tarafından belirtildiği gibi, örtük bir dönüşüm kullanıldığında olası bir kesinti kaybı söz konusudur (bu, ne CAST ne de CONVERT kullandığınız yerdir). Daha fazla bilgi için CAST ve CONVERT öğelerine ve özellikle şu grafiğe bakın: SQL Server Veri Türü Dönüşüm Tablosu . Bu ek bilgilerle, orijinal tavsiye hala aynı kalır. Mümkün olan yerlerde CAST kullanın.
Convert, tarih ve dize dönüşümleri için bir stil parametresine sahiptir.
CAST standart SQL'dir, ancak CONVERT yalnızca lehçe T-SQL içindir. Tarih saatinde dönüşüm için küçük bir avantajımız var.
CAST ile, ifadeyi ve hedef türü belirtirsiniz; CONVERT ile, dönüştürme için stili temsil eden ve karakter dizeleri ile tarih ve saat değerleri gibi bazı dönüşümler için desteklenen üçüncü bir argüman vardır. Örneğin, CONVERT (DATE, '1/2/2012', 101), ABD standardını temsil eden 101 stilini kullanarak değişmez karakter dizesini DATE değerine dönüştürür.
Shakti tarafından kopyalanan yukarıdaki cevabı genişletmek için aslında iki fonksiyon arasındaki performans farkını ölçebildim.
Bu soruya çözümün varyasyonlarının performansını test ediyordum ve standart sapmanın ve maksimum çalışma sürelerinin kullanıldığında daha büyük olduğunu gördüm CAST
.
* Milisaniye cinsinden süreler , türün hassasiyetine göre saniyenin 1 / 300'üne en yakın yuvarlanmışDateTime
Henüz kimsenin not etmediği bir şey okunabilirliktir. Having ...
CONVERT(SomeType,
SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
)
… Anlamak daha kolay olabilir…
CAST(SomeReallyLongExpression
+ ThatMayEvenSpan
+ MultipleLines
AS SomeType
)
CAST(Column1 AS int)
okumak daha mantıklıCONVERT(int, Column1)