Bir datetime
dosyasını bir smalldatetime
'a dönüştürmeye çalışıyorum ve bir satır smalldatetime
türü için aralık dışı bir tarih değerine sahipse, tarihi varsayılan değerine ayarlamak istiyorum izin verilen maksimum tarih ve yine de karşılaştırmamı yapıyor. shph.datetoship
Örneğin 2080-01-11 00:00:00.000
, için olduğunda Cast() smalldatetime için başarısız olduğunda varsayılan değer
SELECT Sum(Case When Cast(shph.datetoship as smalldatetime) < @day1datetoship Then shpd.ordered Else 0 End) as TotDemandPast
FROM shipments shph
WHERE shph.pending = 1;
Bu yüzden
@day1datetoship
kıyasla daha sonra
2079-06-06 00:00:00.000
değiştirildi ve istiyorum.
Bunu yapmanın basit ve zarif bir yolu var mı?
Güncelleme:
daha testten sonra, iki cevabı bazı sorunlar vermek kanıtladı. Son olarak,Cast
içinde başka bir
Case
bildirimi koyarak sorunu çözme bitti.
Final Kodu:
SELECT Sum(Case When Cast(Case WHEN shph.datetoship > '2079-06-06 00:00:00' THEN '2079-06-06 00:00:00' Else shph.datetoship END as smalldatetime) < @day1datetoship Then shpd.ordered Else 0 End) as TotDemandPast
FROM shipments shph
WHERE shph.pending = 1;
Neden 'DateTime' için her şeyi dönüştürmez sorguları
aşağıdaki kullanabilirsiniz SQL server daha düşük sürümleri içinve kullanılan unutmayın karşılaştırmanı yap o zaman? Datetime'dan smalldatetime'a olan – David
dökümünün aralık dışı sorunları olmayacak, tahminim varchar'dan smalldatetime'a geçtiğini tahmin ediyorum. Ve "2079-06-06 olarak değiştirilmesini istiyorum", hiçbir değişiklik yapmıyor =/ –
Değişkeni neden yerine datetime yapmıyorsunuz? – UnhandledExcepSean