Tôi có một truy vấn khá lớn đang cố gắng lấy danh sách nhà cung cấp dịch vụ và so sánh số tiền bảo hiểm mà họ có trong hồ sơ để xác định nhà cung cấp dịch vụ không đáp ứng ngưỡng tối thiểu. Nếu tôi chạy truy vấn chọn nó hoạt động tốt mà không có lỗi. Nhưng khi tôi cố gắng sử dụng nó cho một chèn vào một bảng nó sẽ trả về thông báo lỗi nàyLỗi 1366 - Giá trị thập phân không chính xác: '' cho cột '' tại hàng -1
[Err] 1366 - Incorrect decimal value: '' for column '' at row -1
tôi phải sử dụng các diễn viên như thập phân ở dưới cùng của truy vấn này vì giá trị đang được lưu trữ trong các cơ sở dữ liệu là một varchar và tôi không thể thay đổi điều đó.
Bất kỳ ai có ý tưởng nào?
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;`
Tôi cũng nhận được lỗi này. Rất lạ khi có cột '' và hàng -1 kích hoạt lỗi về giá trị thập phân không chính xác. Bạn đã bao giờ tìm cách giải quyết chưa? – LarsH
Trong trường hợp của tôi, lỗi xảy ra khi cố gắng thay đổi kiểu dữ liệu của một cột từ varchar (10) thành thập phân (6, 3). Cột đã có các giá trị như 3, 5, 6.1, NULL ... và một phiên bản của 'VGA'! Hóa ra cái sau là thủ phạm; nhưng thông báo lỗi vẫn không có ý nghĩa gì: giá trị: '', cột '' và hàng -1 đều được báo cáo sai. – LarsH