Konwersja typu danych

0

Witam,

Mam takie zapytanie , które wywala błąd:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

Zapytanie:

SELECT CAST(RIGHT(RTRIM(k.konto_idm), 5) AS numeric)AS kontrahent, kon.nazwa
FROM dbo.fk_obroty AS ob INNER JOIN
dbo.okrobr AS o WITH (nolock) ON o.podokrrozl_id = ob.podokrrozl_id INNER JOIN
dbo.fk_konto AS k WITH (nolock) ON k.konto_id = ob.konto_id INNER JOIN
dbo.kontrahent AS kon ON kon.identyfikator_num = CAST(RIGHT(RTRIM(k.konto_idm), 5) AS numeric)
WHERE (LEFT(k.konto_idm, 3) IN ('701', '711', '702', '712', '730', '735', '507', '550')) AND (o.okrrozl_id >= 20)
GROUP BY RIGHT(RTRIM(k.konto_idm), 5), kon.nazwa
HAVING (SUM(ob.obr_nar_wn + ob.bo_wn) <> 0) OR
(SUM(ob.obr_nar_ma + ob.bo_ma) <> 0)

Nie bardzo wiem dlaczego tak się dzieje.

0

Prawdopodobnie wartość dla któregoś z rekordów w k.konto_idm dla zakresu z zapytania (warunek where) powoduje, że konwersja nie może się odbyć. Może to być dowolny znak np ";" lub litera ... trzeba sprawdzić bez cast i zweryfikować na którym się sypie ;)

0

Poradziłem sobie w inny sposób. Zmieniłem stronami kolumny do konwersji. Zamiast z k.konto_idm varchar na init zmieniłem identyfikator_num z init na varchar.

SELECT RIGHT(RTRIM(k.konto_idm), 5) AS kontrahent, kon.nazwa
FROM dbo.fk_obroty AS ob INNER JOIN
dbo.okrobr AS o WITH (nolock) ON o.podokrrozl_id = ob.podokrrozl_id INNER JOIN
dbo.fk_konto AS k WITH (nolock) ON k.konto_id = ob.konto_id INNER JOIN
dbo.kontrahent AS kon ON RIGHT(RTRIM(k.konto_idm),4 ) = CAST(kon.identyfikator_num as Varchar )

WHERE (LEFT(k.konto_idm, 3) IN ('701', '711', '702', '712', '730', '735', '507', '550')) AND (o.okrrozl_id >= 20)
GROUP BY RIGHT(RTRIM(k.konto_idm), 5), kon.nazwa
HAVING (SUM(ob.obr_nar_wn + ob.bo_wn) <> 0) OR
(SUM(ob.obr_nar_ma + ob.bo_ma) <> 0)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0