Сравнение VARCHAR2 разной длины в Oracle SQL Developer - PullRequest
0 голосов
/ 31 мая 2019

Была добавлена ​​новая таблица, где я работаю, чтобы обрабатывать платежи через новую систему. Проблема в том, что она содержит только некоторую информацию, поэтому мне нужно сопоставить ее с другой таблицей, чтобы получить полную информацию. По сути, столбец, который может сопоставлять транзакции вместе, имеет тип varchar2 (20) в старой таблице, но это varchar2 (80) в новой таблице.

Новая таблица (назовем ее Z) может содержать что угодно - от 11-значной ссылки до 30-40-символьной (могут быть цифры / буквы / некоторые специальные символы). То, чего я пытаюсь добиться, это сопоставить его со старой таблицей (назовем ее X), которая содержит только 11-значные ссылочные номера.

Итак, допустим, таблица Z выглядит следующим образом:

TransactionType Reference
Purchase        abcd-efgh-1923-aa22
Refund          12345678910

А таблица X выглядит так:

Purchase Reference
Shoes    12345678910
Jacket   10987654321

Реально, я хотел бы найти для возврата и данной ссылки, что это была за покупка.

Я довольно новичок в SQL, и я пытался понять, что может делать приведение / преобразование, но я немного растерялся, потому что я пробовал и приведение, и преобразование.

Я пытался:

select purchase from x, z
where x.reference=z.reference;

select purchase from x,z
where to_number(x.reference)=to_number(z.reference);

select purchase from x,z
where x.reference=cast(z.reference as varchar2(20)); --- and viceversa, casting x to varchar2(80)

Нет выходных данных, хотя, когда я проверяю, скажем, возмещение в день, а затем покупки в тот же день, будут некоторые ссылки, которые соответствуют. Допустим, в течение дня я ожидал, что будет возвращено 5 строк, но строк не будет возвращено.

1 Ответ

0 голосов
/ 31 мая 2019

Функция TO_CHAR должна охватывать вас здесь:

SELECT x.Purchase, x.Reference
FROM X x
INNER JOIN Z z
    ON TO_CHAR(x.Reference) = TO_CHAR(z.Reference)
WHERE z.TransactionType = 'Refund';

Если вы хотите ограничиться определенной ссылкой, просто включите это требование в предложение WHERE.

Обратите внимание, что я реорганизовал ваши объединения, чтобы использовать современное явное внутреннее соединение. Это предпочтительный способ написания кода SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...