SQL Есть ли способ связать две таблицы с одинаковым значением, но разными форматами? - PullRequest
0 голосов
/ 22 января 2019

Итак, у меня есть два столбца из двух разных баз данных, которые я хотел бы связать.

Проблема в том, что мой первый столбец выводит числа с этим форматом "1 789 987", а мой второй столбец выводит данные "0000000001789987"

Как я могу написать свой WHERE sql forumla, чтобы идентифицировать их как совпадающие?

Хорошо, поэтому я вытащил qrys, чтобы предоставить вам больше информации.Вот разные таблицы.

tbl1

tbl2

Похоже, что для столбца Tbl2 в столбце NUM установлено значениетекст.И хотя QRY в программе дал пробелы для чисел в Tbl1, похоже, что qry удалил их shrug

SELECT *
FROM "Tbl1","Tbl2"
WHERE "Tbl1"."num" = "Tbl2"."num" 
AND "Tbl1"."Date" BETWEEN '2019-01-21' AND '2019-01-25' 

Надеюсь, информация стала немного яснее.Я новичок в SQL и Stackoverflow, в будущем я постараюсь улучшить информацию о моих вопросах.

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Ну, чтобы преобразовать формат 1 в формат 2, вы можете попробовать что-то вроде этого:

set @format1 = "1 789 987";
set @format2 = "0000000001789987";

select LPAD(REPLACE(@format1, ' ', ''), 16, "0") as format1, @format2 as format2

Вывод:

====================================
     format1     |     format2
====================================
0000000001789987 | 0000000001789987

Таким образом, формат1 выглядит как формат2, если вы его тестируете,REPLACE удаляет ' ', а LPAD заполнит строку 0, пока строка не будет 16 длина символа, как формат 2.

Так что вы можете использовать это в себе WHERE условие:

...WHERE LPAD(REPLACE(your_first_column, ' ', ''), 16, "0") = your_other_column

Теперь вы можете попытаться преобразовать оба столбца в int, вы не предоставили много информации об этом формате, так что трудно найти лучшее решение!

0 голосов
/ 22 января 2019

Этот состав может подойти для вас:

ПРИМЕЧАНИЕ: tbl1 содержит идентификаторы, такие как: 1 789 987

select *
from tbl1 join tbl2 on (
                        cast( -- casts to integer
                               replace(tbl1.text_id, ' ', '') -- removes whitespaces
                                 as int) = 
                        tbl2.numeric_id -- join on second table
                        )

В любом случае предоставьте образцы данных и пример для тестирования, что вы сделали, и результаты, которые вам нужны

...