Benzer veya karşılaştırmayı kullanarak bir sonuç dizesi nasıl elde edilir

SQL Server 2008'i Kullanma

Table 1 varchar(100)

Values1 (Always one row)

123ABC456

Table2 varchar(200)

Values2 (Mulitple Rows)

123ABC456
123ABC456INV1
123ABC456_JULY
JULY123ABC456
0123ABC456
99123ABC456
JULY 123ABC456 INV 1
123JULYABC456
123_ABC456

Değer2'den tam değer1 eşleşmesini seçmek istiyorum ve ilk 9 karakter değer2 değer1 değerinden eşleşmelidir. Referans için aşağıda

123ABC456 - Exact Match
123ABC456INV1 - First 9 Character Matched
123ABC456_JULY - First 9 Character Matched
JULY123ABC456 - No Match
0123ABC456 - No Match
99123ABC456 - No Match
JULY 123ABC456 INV 1 - No Match
123JULYABC456 - No Match
123_ABC456 - No Match

Gibi sorgu

'% Table1 value%' gibi değerlerin olduğu tablo2'den * seçin.

Beklenen çıktı

123ABC456
123ABC456INV1
123ABC456_JULY

Sorgu için lütfen tavsiye ve destek

1

7 cevap

Bunu dene

SELECT t2.Values2 
FROM Table2 t2
INNER JOIN Table1 t1 ON (t2.Values2 LIKE t1.Values1 + '%')

Values1 uzunluğunu umursamıyor ki bu iyi bir şey.

1
katma
SELECT t2.Values2
FROM Table2 t2
INNER JOIN Table1 t1 
   ON LEFT(t2.Values2,9) = t1.Values1
0
katma

Bu aynı zamanda geçerlidir:

SELECT * FROM Table2 WHERE Value2 LIKE (SELECT Value1 FROM Table1) + '%'
0
katma

SOL işlevini kullanabilirsiniz.

Bir karakter dizesinin sol tarafını belirtilen sayıda döndürür   karakter.

SELECT Table2.Values2 
FROM Table2
JOIN Table1 
ON LEFT(Table2.Values2, 9) = Table1.Values1
0
katma
Değerler1 uzunluğunun tam 9 olduğunu nereden biliyorsunuz?
katma yazar Mihail Shishkov, kaynak
Tamam, kötü, özür dilerim.
katma yazar Mihail Shishkov, kaynak
OP'nin dediği gibi: Değer2'den tam değer1 eşleşmesini seçmek istiyorum ve ilk 9 karakter değer2 değer1'den eşleşmelidir.
katma yazar Stanislovas Kalašnikovas, kaynak
Bu yüzden bunun doğru bir çözüm olduğunu düşünüyorum.
katma yazar Stanislovas Kalašnikovas, kaynak

Bunun için SUBSTR 'ı kullanabilirsiniz:

SELECT 
    * 
FROM 
    table1 t1 
JOIN table2 t2 ON SUBSTR(t1.values,1,9) = SUBSTR(t2.values,1,9)

Düzenleme: SUBSTR daha fazla veritabanı motoru agnostik - yani, LEFT'den daha taşınabilir.

0
katma

Bunu dene.......

select DISTINCT Table2.Value
from   Table1
join   Table2
    on Table1.value = left(Table2.value,9)
0
katma

önce eşleşme dizesini bildirmeniz gerekir ve aynı öneki istediğiniz gibi = 'value%'

DECLARE @match NVARCHAR(255)
SELECT @match= (select * from @Table1) + '%';
Select * from @Table2 where value like @match
0
katma