Ho una query piuttosto ampia che sta cercando di ottenere un elenco di operatori e confrontare l'importo dell'assicurazione che hanno registrato per identificare i vettori che non soddisfano una soglia minima. Se eseguo la query di selezione funziona perfettamente senza errori. Ma quando cerco di usarlo per un inserimento in una tabella che restituisce questo messaggio di erroreErrore 1366 - Valore decimale errato: '' per colonna '' alla riga -1
[Err] 1366 - Incorrect decimal value: '' for column '' at row -1
devo usare il cast come decimale in fondo a questa interrogazione perché il valore che viene memorizzato nella il database è un varchar e non posso cambiarlo.
Qualcuno ha qualche idea?
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;`
Anche questo errore. È molto strano che la colonna "" e la riga -1 attivino un errore sul valore decimale errato. Hai mai trovato una soluzione? – LarsH
Nel mio caso, l'errore si è verificato durante il tentativo di modificare il tipo di dati di una colonna da varchar (10) in decimale (6, 3). La colonna aveva già valori come 3, 5, 6.1, NULL ... e un'istanza di 'VGA'! Risultò che quest'ultimo era il colpevole; ma il messaggio di errore non aveva ancora alcun senso: il valore: '', colonna '' e riga -1 erano tutti segnalati falsamente. – LarsH