Как мне преобразовать столбец VARCHAR в NUMBER? - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь преобразовать всю мою колонку (пожертвование) в число, пока это varchar в Oracle db. Когда я использую функцию TO_NUMBER, я получаю пропущенные правые скобки и ошибки с недопустимыми числами.

Я пытался использовать функцию to_number безрезультатно.

    insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (1, 1, 'Food', 'Oranges', 1);
   insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (2, 2, 'Currency', 200, 2);
   insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (3, 3, 'Currency', 300, 2);
   insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (4, 4, 'Currency', 400, 2);
   insert into DD (Donor_ID, Donation_ID, Donation_Type, Donation, Inventory_ID) values 
   (5, 5, 'Currency', 500, 2);

select di.Donor_Name DI, 
    acz.Address_City ACZ, 
    dd.Donation_Type DD, 
    TO_NUMBER('500' from dd.Donation DD) 

from DI di, ACZ acz, DD dd  
where dd.Donation_Type = 'Currency' AND dd.Donation > 499 
order by Donor_Name

В результате я хочу отобразить пожертвования> 499. Который должен отображаться только в одной строке.

1 Ответ

0 голосов
/ 10 ноября 2019

Если ваша база данных поддерживает to_number(), синтаксис:

select di.Donor_Name DI, 
       acz.Address_City ACZ, 
       dd.Donation_Type as DD, 
       to_number(dd.Donation) 
from DI di join
     ACZ acz
     on ? join  -- MISSING JOIN CONDITION
     DD dd 
     on ?       -- MISSING JOIN CONDITION
where dd.Donation_Type = 'Currency' AND dd.Donation > 499 
order by Donor_Name;

Вы пропустили все ваши join условия.

В большинстве баз данных вы решите проблему, сохранивзначение, используя правильный тип данных. Вы также можете cast() значение:

cast(dd.donation as numeric(15, 4))  -- or whatever
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...