Посмотрите на этот пример.
CREATE TABLE sim (sim_key int, string int);
INSERT INTO sim (sim_key, string) VALUES (1, 111000);
INSERT INTO sim (sim_key, string) VALUES (2, 101101);
select a.string A, b.string B,
sum(case when Substring(A.string,Pos,1) = Substring(B.string,Pos,1) then 1 else 0 end) Matches,
count(*) as RowCount,
(sum(case when Substring(A.string,Pos,1) = Substring(B.string,Pos,1) then 1 else 0 end) /
count(*) * 100.0) as PercentMatch
from sim A
cross join sim B
inner join (
select 1 Pos union all select 2 union all select 3
union all select 4 union all select 5 union all select 6) P
on P.Pos between 1 and length(A.string)
where A.sim_key= 1 and B.sim_key = 2
group by a.string, b.string
Он грубый и, вероятно, содержит больше, чем требуется, но показывает, как это можно сделать. Лучше создать таблицу numbers
, содержащую только цифры от 1 до 1000 или около того, которую можно многократно использовать во многих запросах, где требуется числовая последовательность. Такая таблица заменит (выберите .. объединение виртуальной таблицы, используемой во внутреннем объединении)