可能ですが、面倒です。「area」フィールドを個々の列に正規化できれば、ソリューションがよりきれいになり、はるかに高速になります。
実装例は次のとおりです。
select area, 1 as match_quality
from property
where area = '1-0-3-4'
union
select area, 2 as match_quality
from property
where area like '1-0-3-_'
union
select area, 3 as match_quality
from property
where area like '1-0-_-4'
これは、エリア間の距離が特定の列のどの値でも同じであることを前提としています。そうでない場合は、(SUBSTRINGを介して)コードを取得し、必要な演算を実行することで、コードを改良できます。
領域を個々の列に変換すると、これはより簡単でより良いだけでなく、より高速になります(上記のユニオンの最後のクエリは、インデックスをそれほど効率的に使用できないため、遅くなります)。
例えば:
select *, 1 as match_quality
from property
where area1 = 1
and area2 = 0
and area3 = 3
and area4 = 4
union
select *, 2 as match_quality
from property
where area 1 = 1
and area 2 = 0
and area 4 = 4
union
select *, 3 as match_quality
from property
where area 1 = 1
and area2 = 0
and area4 = 4