veri türü int varchar değeri dönüştürürken dönüştürme başarısız oldu. [Sqlstate 22018] (Hata 245)

oy
0

Ben başarısız sql iş var ve yukarıda hatası oluşturur. Saklı Yordam iş çalışır yüzden bu yüzden (SP çıkmıyor başka tabloya veri eklemek gerekir noktası SP şaşırtıcı başarısız değil ama aynı zamanda iş yapmıyor olduğunu .. sorunu sabitleyebilirsiniz yordamı çalıştırmak için çalıştı ). İyice SP inceledim ve aşağıda çizgi sorun olabilir düşünüyorum ??

Sonunda varchar atması eklemek için çalıştı ve o işe yaramadı. Aşağıdaki satırı müşteri yaşını hesaplamak ve sayısal 'Age' sütunu veri türü (18,6) takın gerekir ..

sütunları yazın:

d.DateofBirth  Date
c.dob DateTime
c.datedeath varchar(50)
c.DateofAttendance DateTime

Birisi yardım edebilir mi lütfen???

CAST(DATEDIFF(DAY, ISNULL(d.DateofBirth, c.dob),ISNULL(CAST(CASE WHEN 
c.datedeath = '00000000' THEN NULL ELSE c.DateDeath END AS DATE),                                                                                                                                                                            
ISNULL(c.DateofAttendance,GETDATE()))) / 365.25 AS INT) AS age
Oluştur 08/11/2018 saat 11:29
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
-1

o daha temiz bir yaklaşım ve veri türlerine bağlı olarak farklı bir davranış olabilir, bu deneyin.

DATEDIFF(
  YEAR,
  ISNULL(d.DateofBirth, c.dob),
  COALESCE(
    CAST(NULLIF(c.datedeath, '00000000') AS DATE),
    c.DateofAttendance,
    GETDATE()
  )
)

Bu işe yaramazsa, bu ifadede başvuran sütunların tam veri türlerini doğrulamaktadır.

Bu işe yaramazsa, bir fethetmek için SP bölün. @JeroenMostert bahsedilen olarak; bunun bir parçası aslında hata üretiyor hangi titizlikle belirledik kadar sırayla SP fo her parçasını yürütün.

Örneğin, yukarıda ifadede, bu bir hata üretiyor eğer sadece deneyebilirsiniz COALESCE()bölümünü ve bu işleri olup olmadığını anlamak ...

  COALESCE(
    CAST(NULLIF(c.datedeath, '00000000') AS DATE),
    c.DateofAttendance,
    GETDATE()
  )


Son olarak, iyi her şeyin aşk için, tarihler aslında TARİH olup VARCHAR veya INT olarak tutulur böylece veri yapısını değiştiren düşünün.

Cevap 08/11/2018 saat 11:50
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more