Convert'e karşı T-SQL Cast


325

Kullanmak olmaması konusundaki genel rehberlik nedir CASTkarşı CONVERT? Birini diğerine karşı seçmeyle ilgili herhangi bir performans sorunu var mı? Bir ANSI-SQL yakın mı?

Yanıtlar:


339

CONVERTSQL Server'a özgüdür, CASTANSI'dir.

CONVERTtarihleri ​​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.


5
Ayrıca, CAST'ın hassasiyeti korumak için kullanılması gereken bazı sayısal dönüşümler olduğuna inanıyorum, ancak bu bilgi için güvenilir bir kaynak bulmakta sorun yaşıyorum.
beruic

2
@beruic Haklısınız, MSDN'de bilgi var: msdn.microsoft.com/en-us/library/ms187928.aspx DECIMAL ve NUMERIC türleri arasında dönüştürme yaparken hassasiyeti korumak için CAST gereklidir.
CF

@CF Bu bilgiyi nerede görüyorsunuz? CAST ve CONVERT ile ilgili genel sayfayı açan bağlantıyı takip ettim ve bulabildiğim kesinlik ile ilgili tek bilgi bilimsel gösterim kullanan kayan nokta değerlerinin dönüştürülmesiyle ilgili. İlk yorumumda yanlış olabilir miyim?
beruic

6
@beruic Makalenin altındaki bu resim ile ilgili i.msdn.microsoft.com/dynimg/IC170617.gif Şimdi, hassas kaybın örtülü dönüşümde olabileceğini ve CAST veya CONVERT kullanıldığında gerçekleşmeyeceğini düşünüyorum. . Oldukça net değil ...
CF

2
@CF Çok açık olmadığına katılıyorum ve kesinlikle daha spesifik belgeler olmalı, bu yüzden Microsoft'un bunu yapmasını umuyoruz. Ama orada iyi tespit :)
beruic


12

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.



6

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
    )

2
Ancak, CAST genellikle daha okunabilir olduğunu düşünüyorum. uzun ifadeler için bile CAST(Column1 AS int)okumak daha mantıklıCONVERT(int, Column1)
S.Serpooshan

4

CAST, ANSI standardını kullanır. Taşınabilirlik durumunda, bu diğer platformlarda çalışır. CONVERT, sql sunucusuna özgüdür. Ama çok güçlü bir işlevdir. Tarihler için farklı stiller belirleyebilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.