CHARINDEX (Transact-SQL)
Bir ifadede başka bir ifadeyi arar ve bulursa başlama konumunu döndürür.
Transact-SQL Sözdizim Kuralları
Sözdizimi
CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )
Bağımsız değişkenler
expressionToFind
Bulunacak diziyi içeren bir karakter ifadesidir. expressionToFind 8000 karakterle sınırlıdır.expressionToSearch
Aranacak bir karakter ifadesidir.start_location
Aramanın başladığı bir integer veya bigint ifadesidir. start_location belirtilmezse, eksi bir sayıysa veya 0 ise, arama expressionToSearch ifadesinin başından başlar.
Dönüş Türleri
expressionToSearch varchar(max), nvarchar(max) veya varbinary(max) veri türlerindeyse bigint; aksi halde int.
Açıklamalar
expressionToFind veya expressionToSearch parametrelerinden biri bir Unicode veri türündeyken (nvarchar veya nchar) diğeri bu türde değilse, diğer parametre Unicode veri türüne dönüştürülür. CHARINDEX text, ntext ve image veri türleriyle kullanılamaz.
expressionToFind veyaexpressionToSearch NULL ise, CHARINDEX NULL döndürür.
expressionToFind expressionToSearch içinde bulunmazsa, CHARINDEX 0 döndürür.
CHARINDEX, karşılaştırmalarını harmanlanmasını temel alarak yapar. Belirli bir harmanlamada bir karşılaştırma yapmak için, girdiye açıkça bir harmanlama uygulamak üzere COLLATE komutunu kullanabilirsiniz.
Döndürülen başlangıç konumu 0 tabanlı değil 1 tabanlıdır.
0x0000 (char(0)), Windows harmanlamalarında tanımsız bir karakterdir ve CHARINDEX'e dahil edilemez.
İkincil Karakterler (Yedek Çiftler)
SC harmanlamaları kullanılırken hem start_location hem dönüş değeri yedek çiftleri iki değil tek karakter olarak sayar. Daha fazla bilgi için, bkz. Harmanlama ve Unicode desteği.
Örnekler
A.Bir ifadenin başlangıç konumunu döndürme
Aşağıdaki örnek bicycle karakter dizisinin Document tablosunun DocumentSummary sütununda başladığı konumu döndürmektedir.
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO
Sonuç kümesi buradadır.
-----------
48
-----------
48
B.Belirli bir konumdan arama
Aşağıdaki örnek, vital ifadesini DocumentSummary sütununun beşinci karakterinden itibaren aramaya başlamak için isteğe bağlı start_location parametresini kullanmaktadır.
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('vital', @document, 5);
GO
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('vital', @document, 5);
GO
Sonuç kümesi buradadır.
-----------
16
(1 row(s) affected)
-----------
16
(1 row(s) affected)
C.Olmayan bir ifadeyi arama
Aşağıdaki örnek expressionToFind ifadesi expressionToSearch içinde bulunmadığında çıkan sonuç kümesini göstermektedir.
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO
USE AdventureWorks2012;
GO
DECLARE @document varchar(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO
Sonuç kümesi buradadır.
-----------
0
(1 row(s) affected)
D.Büyük/küçük harfe duyarlı arama gerçekleştirme
Aşağıdaki örnek 'TEST' dizesini 'Das ist ein Test' ifadesinde büyük/küçük harfe duyarlı olarak aramaktadır.
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS);
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS);
Sonuç kümesi buradadır.
-----------
0
Aşağıdaki örnek 'Test' dizesini 'Das ist ein Test' ifadesinde büyük/küçük harfe duyarlı olarak aramaktadır.
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS);
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'Das ist ein Test'
COLLATE Latin1_General_CS_AS);
Sonuç kümesi buradadır.
-----------
13
E.Büyük/küçük harfe duyarsız arama gerçekleştirme
Aşağıdaki örnek 'TEST' dizesini 'Das ist ein Test' ifadesinde büyük/küçük harfe duyarsız olarak aramaktadır.
USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
'Das ist ein Test'
COLLATE Latin1_General_CI_AS)
GO
USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
'Das ist ein Test'
COLLATE Latin1_General_CI_AS)
GO
Sonuç kümesi buradadır.
-----------
13
Ayrıca bkz.
Başvuru
(Bitiştirme dize) + (Transact-sql)