Dengan asumsi Anda memiliki bidang Anda dalam format ini:
00Data0007
000000Data0011
0000Data0015
, Anda dapat melakukan hal berikut:
-
Buat kolom yang dihitung:
ndata AS RIGHT(REVERSE(data), LEN(data) - 4)
Ini akan mengubah kolom Anda menjadi berikut:
ataD00 ataD000000 ataD0000
-
Buat indeks pada kolom tersebut
-
Keluarkan kueri ini untuk mencari string
Data
:SELECT * FROM mytable WHERE ndata LIKE N'ataD%' AND SUBSTRING(ndata, LEN(N'ataD') + 1, LEN(ndata)) = REPLICATE('0', LEN(ndata) - LEN('ataD'))
Kondisi pertama akan menggunakan indeks untuk penyaringan kasar.
Yang kedua akan memastikan bahwa semua karakter utama (yang menjadi karakter akhir di kolom yang dihitung) tidak lain adalah nol.
Lihat entri ini di blog saya untuk detail kinerja:
Perbarui
Jika Anda hanya ingin indeks di SUBSTRING
tanpa mengubah skema Anda, membuat tampilan adalah pilihan.
CREATE VIEW v_substring75
WITH SCHEMABINDING
AS
SELECT s.id, s.data, SUBSTRING(data, 7, 5) AS substring75
FROM mytable
CREATE UNIQUE CLUSTERED INDEX UX_substring75_substring_id ON (substring75, id)
SELECT id, data
FROM v_substring75
WHERE substring75 = '12345'