2015-07-06 1 views
0

Так что, если у меня есть следующие поля в двух различных таблицахКак мне сопоставлять поля с различными форматами и типами данных?

TABLE 1    |   TABLE 2 
Itm_ID (VARCHAR2) |   Itm_ID (NUMBER)      
99-11-22   |   991122 
12-33-44   |   123344 
23-44-11   |   234411 

... и мне нужно, чтобы соответствовать их друг к другу, чтобы сравнить данные, как бы я изменить таблицу 1 поля для обновления таблицы без дефисов в числах, а затем соответствуют полям таблицы 2?

Я знаю о to_number(), поэтому я думаю, что мой самый большой вопрос - как обновить таблицу без тире в Itm_ID.

+0

Используйте [функция SUBSTR] (HTTP: //docs.oracle.com/cd/B28359_01/server.111/b28286/functions169.htm#SQLRF06114) для извлечения числовых битов струн; используйте оператор [concatentation] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/operators003.htm#SQLRF51156), чтобы скрестить извлеченные биты; затем используйте [TO_NUMBER] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions199.htm#SQLRF06140), чтобы преобразовать в результирующую строку число, которое можно сравнить с другими числами. Удачи. –

+0

Замените тире пустыми строками. –

+0

Синтаксис Oracle: SELECT REPLACE ('99 -11-22 ',' - ',' ') FROM DUAL; – 027

ответ

1

Для сравнения

WHERE TO_NUMBER(REPLACE(TABLE1.ITM_ID,'-',''))=TABLE2.ITM_ID 
0

Здесь вы идете, используйте СЛУЧАЙ проверить значения совпадают или нет!

Select TABLE1.ID, 
TABLE1.Itm_ID , 
TABLE2.Itm_ID , 
CASE 
    WHEN TO_NUMBER (REPLACE(TABLE1.Itm_ID,'-','')) = TABLE2.Itm_ID 
    THEN 'MATCH' 
    ELSE 'NO MATCH' 
     END CASE 
FROM 
TABLE1 , 
TABLE2 
where TABLE1 .id = TABLE2.id; 

ВЫВОД:

enter image description here

Если вы хотите, чтобы постоянно обновлять таблицу 1, затем используйте ниже:

update TABLE1 
    set ITM_ID = TO_NUMBER (REPLACE(TABLE1.Itm_ID,'-','')); 
    -- It will remove '-' from all rows 

    COMMIT;