Bagaimana cara mendapatkan karakter pertama dari string di SQL?

262

Saya memiliki kolom SQL dengan panjang 6. Sekarang ingin hanya mengambil karakter pertama dari kolom itu. Apakah ada fungsi string dalam SQL untuk melakukan ini?

Vinod
sumber

Jawaban:

436

LEFT(colName, 1)juga akan melakukan ini. Ini setara dengan SUBSTRING(colName, 1, 1).

Saya suka LEFT, karena saya merasa sedikit lebih bersih, tapi sungguh, tidak ada perbedaan.

Eric
sumber
2
Saya tidak tahu tentang SQL server, tetapi secara logis server database mungkin dapat mengoptimalkan LEFT lebih baik daripada SUBSTRING ketika menggunakan indeks.
thomasrutter
19
@thomasrutter, Melihat rencana eksekusi, SQL Server (setidaknya 2008R2) secara internal diterjemahkan LEFT(colName, length)ke dalam SUBSTRING(colName, 1, length). Jadi tidak ada optimasi di sini, itu hanya preferensi.
Alexander Abakumov
44

Saya lebih memilih:

SUBSTRING (my_column, 1, 1)

karena itu adalah sintaks Standar SQL-92 dan karenanya lebih portabel.


Sebenarnya, versi standarnya adalah

SUBSTRING (my_column FROM 1 FOR 1)

Intinya adalah, mengubah dari satu ke yang lain, maka untuk variasi vendor yang serupa, adalah sepele.

ps Baru-baru ini menunjukkan kepada saya bahwa fungsi-fungsi dalam SQL standar sengaja bertentangan, dengan memiliki daftar parameter yang bukan commalists konvensional, untuk membuatnya mudah diidentifikasi sebagai berasal dari standar!

suatu hari nanti
sumber
1
Terima kasih, KIRI (str, n) tidak didukung oleh banyak format (termasuk yang saya gunakan).
GreySage
1
Mengapa indeks dimulai dengan 1 dan bukan dengan 0? Ini mengembalikan hasil yang sama: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). Apa itu di posisi 0?
FrenkyB
19

SUBSTRING ( MyColumn, 1 , 1 )untuk karakter pertama dan SUBSTRING ( MyColumn, 1 , 2 )untuk dua yang pertama.

Damovisa
sumber
14
SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student
Devendra Verma
sumber
13

Sangat mudah untuk mencapai hal-hal berikut ini

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

Antara

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

@Result = his

atau

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

@Result = This i

jet_choong
sumber
3

MEMASUKKAN

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
Pisau
sumber
2

Jika Anda mencari karakter pertama dalam string Sql

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

=> return 4
LittleJC
sumber
2

Pilih Dua karakter Pertama di Bidang yang dipilih dengan Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
Darshan
sumber