2009-04-27 32 views

cevap

280

LEFT(colName, 1). SUBSTRING(colName, 1, 1)'a eşdeğerdir.

LEFT'u seviyorum, biraz daha temiz buluyorum, ama gerçekten de, hiçbir şekilde bir fark yok. İlk karakter için ilk karakter ve SUBSTRING (MyColumn, 1 , 2) için

+0

SQL sunucusu hakkında bilmiyorum ama mantıklı bir veritabanı sunucusu optimize etmek mümkün olabilir Bir endeks kullanırken SUBSTRING'den daha iyi. – thomasrutter

+7

@thomasrutter, Bir yürütme planına bakıldığında, SQL Server (en az 2008R2) dahili olarak "SOL (colName, length)" öğesini SUBSTRING (colName, 1, length) 'olarak çevirir. Yani ** herhangi bir optimizasyon yok ** burada sadece bir tercih. –

28

tercihim:

SUBSTRING (my_column, 1, 1) 

o Standart SQL-92 sözdizimi ve dolayısıyla daha taşınabilir olması nedeniyle.


Açıkçası, standart tip dolayısıyla benzer herhangi bir satıcı varyasyonuna, birinden diğerine dönüştürerek

SUBSTRING (my_column FROM 1 FOR 1) 

nokta olacaktır, basittir.

p.s. Standart SQL'deki fonksiyonların, standart olarak kolayca tanımlanabilmelerini sağlamak için geleneksel komiserler olmayan parametre listelerine sahip olmanın kasıtlı olarak tersi olduğuna işaret ettim.

+0

Teşekkür ederim, SOL (str, n), pek çok formatta (kullandığım dahil) desteklenmiyor. – GreySage

0

Sql dizgenin içinde ilk kömürü arama yaparsanız

SELECT CHARINDEX('char', 'my char') 

=> return 4 
1

GİRİŞ

STRMIDDLENAME 
-------------- 
Aravind Chaterjee 
Shivakumar 
Robin Van Parsee 

SELECT STRMIDDLENAME, 
CASE WHEN INSTR(STRMIDDLENAME,' ',1,2) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1)|| 
SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,2)+1,1) 
WHEN INSTR(STRMIDDLENAME,' ',1,1) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1) 
ELSE SUBSTR(STRMIDDLENAME,1,1) 
END AS FIRSTLETTERS 
FROM Dual; 

OUTPUT 
STRMIDDLENAME     FIRSTLETTERS 
---------      ----------------- 
Aravind Chaterjee    AC   
Shivakumar      S 
Robin Van Parsee     RVP 
4
SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student 
5

O izleyerek bunu başarmak için basittir:

DECLARE @SomeString NVARCHAR(20) = 'This is some string' 
DECLARE @Result NVARCHAR(20) 

ve

SET @Result = SUBSTRING(@SomeString, 2, 3) 
SELECT @Result 

@Result: his

-VEYA-

SET @Result = LEFT(@SomeString, 6) 
SELECT @Result 

@Result: This i

İlgili konular