Wie erhalte ich das erste Zeichen einer Zeichenfolge in SQL?

262

Ich habe eine SQL-Spalte mit einer Länge von 6. Jetzt möchte ich nur das erste Zeichen dieser Spalte nehmen. Gibt es eine String-Funktion in SQL, um dies zu tun?

Vinod
quelle

Antworten:

436

LEFT(colName, 1)werde dies auch tun. Es ist gleichbedeutend mit SUBSTRING(colName, 1, 1).

Ich mag es LEFT, da ich es etwas sauberer finde, aber es gibt wirklich keinen Unterschied.

Eric
quelle
2
Ich weiß nichts über SQL Server, aber logischerweise kann ein Datenbankserver LEFT möglicherweise besser optimieren als SUBSTRING, wenn er einen Index verwendet.
Thomasrutter
19
@thomasrutter, Betrachtet man einen Ausführungsplan, übersetzt SQL Server (mindestens 2008R2) intern LEFT(colName, length)in SUBSTRING(colName, 1, length). Hier gibt es also keine Optimierungen , es ist nur eine Präferenz.
Alexander Abakumov
44

Ich bevorzuge:

SUBSTRING (my_column, 1, 1)

weil es Standard SQL-92-Syntax ist und daher portabler.


Genau genommen wäre die Standardversion

SUBSTRING (my_column FROM 1 FOR 1)

Der Punkt ist, dass die Transformation von einem zum anderen und damit zu einer ähnlichen Anbietervariante trivial ist.

ps Ich wurde erst kürzlich darauf hingewiesen, dass Funktionen in Standard-SQL absichtlich gegensätzlich sind, indem sie Parameterlisten haben, die nicht die herkömmlichen Commalisten sind, um sie leicht als vom Standard stammend zu identifizieren!

eines Tages, wenn
quelle
1
Vielen Dank, LEFT (str, n) wird von vielen Formaten (einschließlich des von mir verwendeten) nicht unterstützt.
GreySage
1
Warum beginnt der Index mit 1 und nicht mit 0? Dies gibt das gleiche Ergebnis zurück: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). Was ist es in Position 0?
FrenkyB
19

SUBSTRING ( MyColumn, 1 , 1 )für das erste Zeichen und SUBSTRING ( MyColumn, 1 , 2 )für die ersten beiden.

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

Es ist einfach durch Folgendes zu erreichen

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

Entweder

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

@Result = his

oder

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

@Result = This i

jet_choong
quelle
3

EINGANG

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
Shiv
quelle
2

Wenn Sie das erste Zeichen einer Zeichenfolge in einer SQL-Zeichenfolge suchen

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

=> return 4
LittleJC
quelle
2

Wählen Sie die ersten beiden Zeichen im ausgewählten Feld mit Left(string,Number of Char in int)

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