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?

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.


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!


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.



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


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

2

Jika Anda mencari karakter pertama dalam string Sql

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

=> return 4

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.