Bagaimana saya bisa menemukan semua posisi dengan patindex
dalam tabel atau variabel?
declare @name nvarchar(max)
set @name ='ali reza dar yek shabe barani ba yek '
+ 'dokhtare khoshkel be disco raft va ali baraye'
+ ' 1 saat anja bud va sepas... ali...'
select patindex('%ali%',@name) as pos
Ini mengembalikan 1
tetapi saya ingin semua hasil, misalnya:
pos
===
1
74
113
sql-server
sql-server-2005
string-searching
coditori
sumber
sumber
1
dalam string yang hanya berisi nol dan satu. Saya telah menggunakan solusi dan @ aaron-bertrand Anda, tetapi saya mendapatkan hasil dan kinerja yang sama. Solusi mana yang lebih baik?Saya pikir ini akan sedikit lebih efisien daripada metode perulangan yang Anda pilih ( beberapa bukti di sini ), dan jelas lebih efisien daripada CTE rekursif:
Penggunaan sampel:
Hasil:
Jika string Anda lebih panjang dari 2K maka gunakan sys.all_columns sebagai ganti sys.all_objects. Jika lebih dari 8K maka tambahkan tanda silang.
sumber
- CTERecursive
sumber
Saya suka jawaban Aaron Bertrand. Meskipun saya tidak mengerti sepenuhnya, itu terlihat sangat elegan.
Di masa lalu saya mengalami masalah dengan izin saat menggunakan
sys.objects
. Dikombinasikan dengan kebutuhan saya untuk memecahkan masalah kode, saya telah membuat variasi pada kode Aaron, dan menambahkannya di bawah.Ini adalah prosedur saya:
The
MAX(posid)
nilai juga jumlah pertandingan ditemukan.sumber
Ini adalah kode sederhana berdasarkan jawaban Harun yang:
KODE:
HASIL
sumber
sys.all_columns
(Anda dapat menggunakan sumber apa pun asalkan mencakup panjang string terpanjang Anda), dan saya juga telah menguji ulang dan saya tidak melihat di mana saya melewatkan 'X' terakhir .. .Maaf teman-teman terlambat datang, tapi saya ingin mempermudah orang-orang yang ingin memperluas ini. Saya melihat masing-masing implementasi ini, mengambil salah satu yang tampak terbaik bagi saya (Aaron Bertrand), menyederhanakannya dan di sini Anda pergi, Anda memiliki "template". Gunakan dengan bijak.
Sama seperti referensi - Anda dapat memperoleh perilaku lain dari ini, seperti memperluas di PATINDEX ():
sumber
sumber