2014-12-10 22 views
7

kısmındaki ' 'sütun için'' Minimum eşiği karşılamıyor. Seçme sorgusunu çalıştırırsam, hatasız çalışır. Bir tabloya bir ekleme için kullanmaya çalıştığınızda Ama bu hata mesajHata 1366 - Yanlış ondalık değer: Arka arkaya -1 Ben operatörlerin bir listesini almak ve onlar taşıyıcıları tespit etmek kayıtlara sahip sigorta miktarını karşılaştırmak için çalışıyor oldukça büyük bir sorgu var

[Err] 1366 - Incorrect decimal value: '' for column '' at row -1

ben bu sorgu altındaki ondalık olarak döküm kullanmak zorunda döndürdüğü için saklanan ediliyor değeri veritabanı bir varchardır ve bunu değiştiremiyorum.

Herkes herhangi bir fikir var mı? select iş gibi görünüyor, o zaman iki olası sorunlar

set @cw_days = 15; 
INSERT INTO carrier_dnl (carrier_id, dnl_reason_id, status_id) 
SELECT work_cw_carrier_status_update.carrier_id, company_dnl_schema.dnl_reason_id, 
    CASE 
    WHEN work_cw_carrier_status_update.comparison_date > @cw_days THEN 1 
    ELSE 4 
    END as status 
    FROM work_cw_carrier_status_update 
    JOIN company_dnl_schema 
    ON company_dnl_schema.dnl_reason_id = 51 
    LEFT OUTER JOIN carrier_insurance 
    ON carrier_insurance.carrier_id = work_cw_carrier_status_update.carrier_id 
    WHERE ifnull(carrier_insurance.insurance_type_id,4) = 4 
    AND date(now()) BETWEEN IFNULL(carrier_insurance.insurance_effective_date,DATE_SUB(now(),INTERVAL 1 day)) AND IFNULL(carrier_insurance.insurance_expiration_date,DATE_ADD(now(),INTERVAL 1 day)) 
    AND CASE WHEN NULLIF(carrier_insurance.insurance_bipdto_amount,'') is null THEN 0 < company_dnl_schema.value 
    ELSE 
     ifnull(cast(replace(carrier_insurance.insurance_bipdto_amount, '*','') as decimal),0) < company_dnl_schema.value 
    END 
    AND (work_cw_carrier_status_update.b_bulk = 0 OR work_cw_carrier_status_update.b_bulk = 1) 
    AND (work_cw_carrier_status_update.b_otr = 1 OR work_cw_carrier_status_update.b_ltl = 1 
      OR work_cw_carrier_status_update.b_dray = 1 OR work_cw_carrier_status_update.b_rail = 1 
      OR work_cw_carrier_status_update.b_intermodal = 1 OR work_cw_carrier_status_update.b_forwarder = 1 
      OR work_cw_carrier_status_update.b_broker = 1) 
group by work_cw_carrier_status_update.carrier_id;` 
+0

Bu hatayı da alıyorum. '' Sütununa sahip olmak ve satır -1'in yanlış ondalık değeriyle ilgili bir hatayı tetiklemesi çok garip. Hiç bir çözüm buldunuz mu? – LarsH

+1

Durumumda, bir sütunun veri türünü varchar'dan (10) ondalık (6, 3) olarak değiştirmeye çalışırken hata oluştu. Sütun zaten 3, 5, 6.1, NULL ... ve bir 'VGA' örneği gibi değerlere sahipti! Bu ikincisi suçlu çıktı; Ancak hata mesajı hala bir anlam ifade etmedi: '', '' sütun '' ve satır -1 'değerleri yanlış olarak bildirildi. – LarsH

cevap

1

bulunmaktadır. Birincisi, select'un gerçekten çalışmadığı ve sorunun verilerde daha aşağıya doğru göründüğü. Bir veya birkaç satır döndürmek, her zaman "çalışma" ile aynı değildir.

ikinci uç için türleriyle uyumsuzluktur.

SELECT work_cw_carrier_status_update.carrier_id + 0, company_dnl_schema.dnl_reason_id + 0, 
     (CASE WHEN work_cw_carrier_status_update.comparison_date > @cw_days THEN 1 
      ELSE 4 
     END) as status 

Bu çirkin görünebilir, ama bir tabloda dizeleri olarak kimlikleri depolamak olarak diğerinde sayı olarak yaklaşık olarak çirkin değildir: Sen sayılara select değerleri dönüştürmek için sessiz dönüşüm kullanmayı deneyebilirsiniz.

+0

Bunu bir deneyin ve göreceğim. Teşekkürler! –

+0

Yine de işe yaramadı. Hala kayboldum ... eğer aşağıdaki dökümanı kaldırırsam, etkilenmesini istemediğim kayıtları döndürür. Bu hata –

+0

Temiz: "CAST()" yi temiz olmayan verilerle silme ve diğer dönüşümleri kullanma kesinlikle bunun için düzeltme. Ben sadece ** DECIMAL sütunları ile sonuçlanan 3 karmaşık hesaplamalar ile çok büyük bir sorguda ** MySQL 5.6.25 ** ile bu sorunu vardı. SELECT'i temizleyebildim ama INSERT başarısız oldu. Hatta OLUŞTURMA SEÇENEĞİ OLUŞTUR ..., 'aynı hatayla başarısız oldu. Benim durumumda hata her zaman doğru bir hataydı, ancak hata verileri: değer, satır ve sütun yanlış ve güvenilir değildi. – ebyrob