SQL'de bir dizenin ilk karakterini nasıl alabilirim?


262

6 Uzunluğunda bir SQL sütunu var. Şimdi bu sütunun sadece ilk karakterini almak istiyorum. SQL'de bunu yapmak için herhangi bir dize işlevi var mı?

Yanıtlar:


436

LEFT(colName, 1)bunu da yapacak. Eşdeğerdir SUBSTRING(colName, 1, 1).

LEFTBiraz daha temiz bulduğum için seviyorum , ama gerçekten, her iki şekilde de bir fark yok.


2
SQL sunucusu hakkında bilmiyorum, ama mantıksal olarak bir veritabanı sunucusu bir dizin kullanırken SUBSTRING daha iyi optimize olabilir.
thomasrutter

19
@thomasrutter, yürütme planı baktığımızda, SQL Server (en azından 2008R2) dahili olarak çevirir LEFT(colName, length)içine SUBSTRING(colName, 1, length). Yani burada herhangi bir optimizasyon yok, bu sadece bir tercih.
Alexander Abakumov

44

Tercih ederim:

SUBSTRING (my_column, 1, 1)

çünkü Standart SQL-92 sözdizimi ve bu nedenle daha taşınabilir.


Kesinlikle konuşmak gerekirse, standart sürüm

SUBSTRING (my_column FROM 1 FOR 1)

Buradaki nokta, birinden diğerine, dolayısıyla herhangi bir benzer satıcı varyasyonuna dönüştürmenin önemsiz olmasıdır.

ps Son zamanlarda standart SQL'deki işlevlerin, standart komalistler olmayan parametre listelerine sahip olduklarından, standarttan kolayca ayırt edilebilmelerini sağlamak için kasıtlı olarak ters düştüğünü belirtmiştim!


1
Teşekkürler, LEFT (str, n) birçok format tarafından desteklenmemektedir (kullandığım format dahil).
Mart'ta GreySage

1
Dizin neden 0 ile değil 1 ile başlıyor? Bu aynı sonucu döndürür: SUBSTRING (sütunumn, 1, 1) = SUBSTRING (sütunum, 0, 2). 0 konumunda ne var?
FrenkyB

19

SUBSTRING ( MyColumn, 1 , 1 )ilk karakter ve SUBSTRING ( MyColumn, 1 , 2 )ilk iki karakter için.



13

Aşağıdakilerle başarmak kolaydır

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

ya

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

@Result = his

veya

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

@Result = This i


3

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

2

Sql dizesinde dizenin ilk karakterini ararsanız

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

=> return 4

2

Seçilen alanda ilk iki karakteri seçin. Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.