Jadi saya memiliki satu set entri di Table1

Field1 
------
aaa111 
aaa222 
bbb333 

Dan saya punya tabel lain - Prefixes:

Prefix
------
aaa
bbb
ccc

Saya ingin output terlihat seperti ini:

Output
------
111
222
333

Aka, jika salah satu Field1 di Table1 dimulai dengan sesuatu di Prefixes , rapikan bagian itu. Saya dapat membuat cursor dan melakukan perbandingan like, tetapi saya ingin tahu apakah ada solusi yang lebih sederhana?

Catatan: awalan tidak harus 3 karakter dan tidak ada awalan yang tumpang tindih

0
Eric Klaus 13 Agustus 2019, 21:01

1 menjawab

Jawaban Terbaik

Nah, Anda dapat menggunakan left join:

select coalesce(stuff(t1.field1, 1, len(p.prefix), ''), t1.field1) as new_field1
from table1 t1 left join
     prefixes p
     on t1.field1 like p.prefix + '%';

Ini tidak akan efisien. SQL Server harus melakukan nested-loop join, bersepeda melalui semua awalan. Ini juga mengasumsikan bahwa awalan adalah set "terpisah" dalam arti bahwa paling banyak satu akan cocok.

Jika beberapa awalan bisa cocok, Anda perlu menjelaskan cara memilih yang sesuai.

3
Gordon Linoff 13 Agustus 2019, 18:04