MS SQL varchar veri türünden bir datetime veri türüne dönüştürme aralık dışı bir değerle sonuçlandı hatası
Selamlar,
SQL Server'da çalışırken böyle bir hata alıyorsak sorun dönüştürmemekten geliyor.
Hemen örnek gösterelim.
Select * from TldPrice T
INNER JOIN ResellerGroup G on T.ResellerGroupId = G.Id
INNER JOIN Reseller R on R.ResellerGroupId = G.Id
INNER JOIN PriceDefinition P on T.PriceDefinitionId = P.Id
LEFT JOIN Trade A on A.ResellerId = R.Id
Where A.CreatedOn Between '2016-07-30 00:00:00' AND '2016-07-30 23:00:00'
Yukarıdaki sorguda kalın yerlerle işaretlediğim kısımlara bakın. Direk tarihi böyle bir formatta vermişim. Ancak SQL Server'ın bunu Cast etmesi gerekiyor.
Sorgunun yeni hali şöyle:
declare @tarih datetime
select @tarih = cast('2016-07-30 00:00:00' as datetime2)
declare @tarih2 datetime
select @tarih2 = cast('2016-07-31 23:59:59' as datetime2)
Select * from TldPrice T
INNER JOIN ResellerGroup G on T.ResellerGroupId = G.Id
INNER JOIN Reseller R on R.ResellerGroupId = G.Id
INNER JOIN PriceDefinition P on T.PriceDefinitionId = P.Id
LEFT JOIN Trade A on A.ResellerId = R.Id
Where A.CreatedOn Between @tarih AND @tarih2
Cast ettiğim zaman sorgu düzelir.
Iyi günler,
Recep.
Cast etmek işe yaramıyorsa TRY_PARSE metodunu deneyin.
Örnek:
Update Urunler Set Tarih = TRY_PARSE('2018-05-19' as datetime2') Where ID = 1
Metoda önce alacağı değeri söylüyoruz, ardından dönüşeceği türü söylüyoruz. Cast'in işe yaramadığı durumlarda genellikle işe yarar.