MS SQL Server PATINDEX T-SQL Fonksiyonu
SQL Patindex fonksiyonu ile tablonuzun bir kolonunda aradığınız belirli bir "pattern"ın konumunu belirleyebilirsiniz. Böylece "pattern"ı içinde aradığınız kolon üzerinde bulduğunuz index'e bağlı olarak string işlemler yapabilirsiniz.
T-SQL Patindex fonksiyonu, PATINDEX('%pattern%', expression) şeklinde kullanılır ve fonksiyonun dönen değeri "int" tipinde bir ifadedir.
Hemen ifade etmeliyim ki T-SQL PATINDEX fonksiyonunu sadece pattern ilgili kolonda var mı yoksa yok mu diye bir test için kullanacaksanız LIKE komutu ile arasında bir fark bulamayacaksınız. Hız açısından da iki SQL fonksiyon arasında bir fark yoktur.
Kullanıma yönelik bir fark da SQL PATINDEX fonksiyonunun nondeterministic bir fonksiyonken LIKE fonksiyonu deterministic'tir.
Bu fark PATINDEX kullanılarak oluşturulmuş bir view üzerinde clustered index oluşturulmasına engeldir.
Aynı zamanda PATINDEX ile oluşturulmuş bir computed-column üzerinde de index tanımlanamaz.
Örneğin @text karakter ifadesi içindeki geçen ilk numerik değeri okuyan sql cümleciği olarak aşağıdaki ifadeyi kullanabilirsiniz.
DECLARE @text nvarchar(100)
SET @text = N'dsdg fhr345ehd ghdfgh'
SELECT
LEFT(
RIGHT(@text, LEN(@text) - (PATINDEX(N'%[0-9]%',@text) - 1)),
PATINDEX(
N'%[^0-9]%',
RIGHT(@text, LEN(@text) - (PATINDEX(N'%[0-9]%',@text) - 1))
) - 1
)
Eğer @text ifadesi aranılan sayısal değer ile bitiyorsa SQL LEFT fonksiyonundan hata mesajı dönecektir.
Bunu önlemek için bu değişkene veya tablodan okuyorsanız kolon değerinin sonuna bir sonlandırma karakteri eklerseniz bu hatanın da önüne geçmiş olacaksınız.