2015-01-14 11 views
5

Bir sql sorgusu ile performans nedenleriyle benim C# kodu yerine gidiyorum:Bir datetime'yi ddMMyy olarak nasıl seçebilirim, yani iki basamaklı bir yıl mı?

CreatedAt.ToString("ddMMyy", System.Globalization.CultureInfo.InvariantCulture) 

140115 olarak (bugün için) oluşturma-tarihini döndürür. C# 'da yeterince basit ama bunu T-SQL'de nasıl elde ederim? Ben denedim

:

neredeyse doğru olmakla yıl dört basamak yerine iki sahiptir
REPLACE(CONVERT(CHAR(10), ChargeArrival.CreatedAt, 103), '/', '') 

yüzden 14012015 yerine 140115.

+0

Buna daha iyi performans göstereceği ikna değilim bunu kullanabilirsiniz . Veri türü dönüştürme, SQL Server'da da ücretsiz değildir. –

+0

@AaronBertrand: Bu, optimizasyonun bir parçası olan tarih nesnesi değil, nesnenin diğer veritabanı sorguları tarafından başlatılan karmaşık alanları içerdiği LINQ-To-SQL'in yerini alır. Şimdi tüm ilgili alanları içeren bir görünüm kullanıyorum. 100 satır seçmek için 20 saniye sürdü (100 nesne yükle), şimdi bir saniyenin sadece bir kısmı. –

+1

Tamam, açık değildi, verimlilik problemi sadece C# biçiminde biçimlendirme uygulamak gibi geliyordu. –

cevap

8

Eğer yüzyıl ve 3 istiyorsanız yoksa docs for CONVERT devlet, 103 kullanıldıkça:

REPLACE(CONVERT(CHAR(10), ChargeArrival.CreatedAt, 3), '/', '') 
+0

Teşekkürler. Orman için ormanı özlüyordum. –

+1

Her gün SO'daki yeni öğrenimi. –

3

Ayrıca

SELECT REPLACE(CONVERT(CHAR(10), ChargeArrival.CreatedAt, 5), '-', '') 
İlgili konular